Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a79a6b4
Solution folders, plus some spacing nudges
adeutscher Sep 4, 2026
54f3691
Initial Cursor output.
adeutscher Sep 5, 2026
3898a17
readme fmt
adeutscher Sep 5, 2026
6094e57
Hacky-smelling fixes to get local testing working.
adeutscher Sep 5, 2026
01f377b
implementation cleanup progress
adeutscher Sep 5, 2026
136409f
implementation cleanup progress, again
adeutscher Sep 5, 2026
dcc9ea2
starting to split off AWS IoT from the rest of the project
adeutscher Sep 5, 2026
3d7c6d2
mostly generated documentation
adeutscher Sep 5, 2026
f44b251
Rename MqttImplementation project to RedShirt.Example.Api.ClientEvent…
adeutscher Sep 5, 2026
40cb6ee
Create Mqtt.Aws subproject, started on documentation in docs/ explain…
adeutscher Sep 5, 2026
1860b16
documentation updates
adeutscher Sep 5, 2026
3ec369b
Documentation: Generate an example Javascript client.
adeutscher Sep 5, 2026
0e44893
Documentation: Other Resources section
adeutscher Sep 5, 2026
3cffbdc
Documentation: Describe endpoints
adeutscher Sep 5, 2026
51e4eb0
generalize
adeutscher Sep 5, 2026
702f1bd
phrasing
adeutscher Sep 5, 2026
d9e2bcd
unit tests
adeutscher Sep 5, 2026
0950a68
rename url resolver to be more indicative
adeutscher Sep 5, 2026
3ba409f
Documentation: Talk briefly about SignalR.
adeutscher Sep 5, 2026
8ee4560
Link in root readme
adeutscher Sep 5, 2026
1290fe2
additional test coverage
adeutscher Sep 5, 2026
bb05730
solution cleanup sweep
adeutscher Sep 5, 2026
e4a589d
swagger
adeutscher Sep 5, 2026
3788471
Swagger funtimes. Add EventStreamListener sample.
adeutscher Sep 5, 2026
c92e362
refine JavaScript/TypeScript examples
adeutscher Sep 5, 2026
5857b3a
standalone C# Example
adeutscher Sep 5, 2026
b1717e2
header in documentation section
adeutscher Sep 5, 2026
18e75df
plural
adeutscher Sep 5, 2026
047f86d
Address chicken-and-egg problem problem on cold builds
adeutscher Sep 5, 2026
6195253
Move exceptions back to root. Not thrilled, but consistent with old N…
adeutscher Sep 6, 2026
1fe7268
mqtt nuget
adeutscher Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ Repo features in more detail:
manager from being continually polled.
* Configuration is based on environment variables.
* File upload and tracking examples.
* Server-sent events over MQTT.
* For more information, see [`docs/patterns/server-sent-events.md`](docs/patterns/server-sent-events.md)
* Documentation on common data handling practices:
* [Event Sourcing](docs/patterns/event-sourcing.md)

Expand Down Expand Up @@ -100,7 +102,21 @@ Below are the recommended steps for using this as a template:

2. Write database accessors and/or service connectors based on your application's needs.
3. Prune database accessors and/or service connectors that your application does not need.
4. Consider revising/pruning the Markdown files such as this README or those located in the `docs/` directory. They
4. The example of Server-Sent Events needed a bespoke handler, the standard NSwag clients did not know how to support
event streams. This handler can be found in the `RedShirt.Example.Api.Interop` project, defined in
`EventStreamListener.cs`.
* The `EventStreamListener.cs` contains the abstract `EventStreamListener` and the applied
`MessagesEventStreamListener`, which sets some defaults.
* If you are implementing Server-Sent Events but not as `/messages` as this example does, then I would recommend
adjusting the comments described in `MessagesEventStreamListener`.
* If you are not implementing Server-Side Events in your applied application, then I would recommend deleting
`EventStreamListener.cs` outright.
* The pattern of emulating the generated swagger clients by throwing a `SwaggerException` required the manual
declaration of `SwaggerException` and `ProblemDetails` to avoid a chicken-and-egg problem on build where a
cold build without generated code failed because the manual code was expecting it. If you are removing
`EventStreamListener`, then you might also want to consider removing these manual classes and adjusting
`nswag.json` to generate them again.
5. Consider revising/pruning the Markdown files such as this README or those located in the `docs/` directory. They
heavily assume that they are speaking for a general template and not for an applied application.

## Secret Manager
Expand Down
20 changes: 20 additions & 0 deletions RedShirt.Example.Api.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<Folder Name="/Solution Items/docs/patterns/">
<File Path="docs\patterns\event-sourcing.md"/>
<File Path="docs\patterns\rosalyn-source-generation.md"/>
<File Path="docs\patterns\server-sent-events.md"/>
<File Path="docs\patterns\uploads.md"/>
</Folder>
<Folder Name="/src/">
Expand Down Expand Up @@ -76,8 +77,21 @@
Path="src\RedShirt.Example.Api.DataStores.Common.DapperMySql\RedShirt.Example.Api.DataStores.Common.DapperMySql.csproj"/>
<Project Path="src\RedShirt.Example.Api.DataStores.Common\RedShirt.Example.Api.DataStores.Common.csproj"/>
</Folder>
<Folder Name="/src/events/">
<Project
Path="src/RedShirt.Example.Api.ClientEvents.Domains.Example/RedShirt.Example.Api.ClientEvents.Domains.Example.csproj"/>
</Folder>
<Folder Name="/src/events/common/">
<Project
Path="src/RedShirt.Example.Api.ClientEvents.Library.Core/RedShirt.Example.Api.ClientEvents.Library.Core.csproj"/>
<Project
Path="src\RedShirt.Example.Api.ClientEvents.Library.Mqtt\RedShirt.Example.Api.ClientEvents.Library.Mqtt.csproj"/>
<Project
Path="src\RedShirt.Example.Api.ClientEvents.Library.Mqtt.Aws\RedShirt.Example.Api.ClientEvents.Library.Mqtt.Aws.csproj"/>
</Folder>
<Folder Name="/swagger/">
<Project Path="swagger/RedShirt.Example.Api.Interop/RedShirt.Example.Api.Interop.csproj"/>
<Project Path="test/RedShirt.Example.Api.Interop.UnitTests/RedShirt.Example.Api.Interop.UnitTests.csproj"/>
</Folder>
<Folder Name="/test/">
<Project Path="test/RedShirt.Example.Api.Core.UnitTests/RedShirt.Example.Api.Core.UnitTests.csproj"/>
Expand Down Expand Up @@ -143,4 +157,10 @@
<Project
Path="test\RedShirt.Example.Api.DataStores.Common.DapperMySql.UnitTests\RedShirt.Example.Api.DataStores.Common.DapperMySql.UnitTests.csproj"/>
</Folder>
<Folder Name="/test/events/">
<Project
Path="test\RedShirt.Example.Api.ClientEvents.Library.Mqtt.UnitTests\RedShirt.Example.Api.ClientEvents.Library.Mqtt.UnitTests.csproj"/>
<Project
Path="test\RedShirt.Example.Api.ClientEvents.Library.Mqtt.Aws.UnitTests\RedShirt.Example.Api.ClientEvents.Library.Mqtt.Aws.UnitTests.csproj"/>
</Folder>
</Solution>
Loading