An ASP.NET 9.0 Web API, SignalR and GRPC project using Clean Architecture to quickly bootstrap new projects. Includes Identity, JWT authentication w/ refresh tokens. The design of the application is driven by both Domain-Driven-Design and Clean Architecture (https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html). It makes use of Command and Decorator pattern, and MediatR for in-process synchronous messaging.
- Copy 
nuget.config.FIXMEtonuget.config - Add 
Usernameand access token from github Developer Settings 
- 
Uses PostgreSQL.
 - 
Install/update dotnet ef tool:
$ dotnet tool install --global dotnet-ef $ dotnet tool update --global dotnet-ef - 
Either run the application /
Web.Api.Infrastructureproject and the DB will be automatically created or: - 
Apply database migrations to create the db. From a command line within the
Web.Api.Infrastructureproject folder use the dotnet CLI to run :$ cd src/Web.Api.Infrastructure $ dotnet ef database update -c AppDbContext $ dotnet ef database update -c AppIdentityDbContext 
npm install @microsoft/signalr- Copy content of 
node_modules\@microsoft\signalr\dist\browsertowwwroot/lib/signalr 
- Generate TLS cert and put the 
localhost.pfxinto/tmp - Open the solution file 
AspNetCoreWebApi.slnand build/run. 
Ctrl+Shift+Bto build- Generate TLS cert and put the 
localhost.pfxinto/tmp F5to start debug session
- Install .Net Core Test Explorer
 echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p- dotnet/aspnetcore#8449
 
To explore and test the available APIs simply run the project and use the Swagger UI @ http://localhost:{port}/swagger/index.html
The available APIs include:
- POST 
/api/accounts- Creates a new user. - POST 
/api/auth/login- Authenticates a user. - POST 
/api/auth/refreshtoken- Refreshes expired access tokens. - POST 
/api/accounts/changepassword- Change password. - POST 
/api/accounts/resetpassword- Reset password. - GET 
/api/accounts/lock/{id}- Locks a user account id. - GET 
/api/accounts/unlock/{id}- Unlocks a user account id. - DELETE 
/api/accounts/{username}- Delete a user using username. - GET 
/api/protected- Protected controller for testing role-based authorization. 
- logs are available at 
/var/log/aspnetcore/logYYYYMMDD_* 
- Enter powershell: 
powershell Get-Content -Path "c:\var\log\aspnetcore\logYYYYMMDD_<foo>" -Wait
- Integrated with CircleCI
 
- If ingress uses a prefix path, the prefix needs to be added as an environment variable 
PATH_BASE(orappsettings.jsonmounted from ConfigMap) - Swagger does NOT work when the 
PATH_BASEis not/due to an issued filed as dotnet/aspnetcore#42559