Fix deployment diagram's solution file name, ports, service lists, and network/volume names

This commit is contained in:
Aaron Po
2026-08-31 22:03:32 -04:00
parent a028f7ec72
commit 93feee5a72
2 changed files with 16 additions and 8 deletions

View File

@@ -6,10 +6,10 @@
## Notes ## Notes
- **Dev network** (`biergarten-dev`, bridge): internal DNS resolves `sql-server` and `api`. Volumes: `biergarten-dev-data`. Startup order: SQL Server (health check) → migrations (run-once) → seed (run-once) → API (long-running). - **Dev network** (`devnet`, bridge): internal DNS resolves service names such as `sqlserver` and `api.core`. Volumes: `sqlserverdata-dev`, `nuget-cache-dev`, `seaweedfsdata-dev`. Startup order: SQL Server (health check) → migrations (run-once) → seed (run-once, depends on `seaweedfs`) → API (long-running, depends on seed).
- **Test network** (`biergarten-test`, bridge): all test components isolated; fresh DB instance each run (`CLEAR_DATABASE=true`, ephemeral `biergarten-test-data` volume). All tests run in parallel, results aggregated. - **Test network** (`testnet`, bridge): all test components isolated; fresh DB instance each run (`CLEAR_DATABASE=true`, ephemeral `sqlserverdata-test`/`seaweedfsdata-test` volumes). `api.specs`, `unit.tests`, and `frontend.tests` all run as separate containers, results aggregated.
- **Prod network** (`prodnet`, bridge): isolated from dev/test networks. Volumes: `sqlserverdata-prod`, `nuget-cache-prod`. No seed step in production. - **Prod network** (`prodnet`, bridge): isolated from dev/test networks. Volumes: `sqlserverdata-prod`, `nuget-cache-prod`. No seed step in production.
- **Database-only environment**: same devnet volumes/images as `docker-compose.dev.yaml`, minus `api.core` and `mailpit` — for working against the database without running the API. - **Database-only environment**: same devnet volumes/images as `docker-compose.dev.yaml`, minus `api.core`, `frontend`, and `mailpit` — for working against the database (and object storage, since `seaweedfs` is still included) without running the API or website.
- **Minimal environment**: database + mailpit only, no API container — for frontend development against an `API.Core` process run outside Docker. - **Minimal environment**: database + migrations + seed + `seaweedfs` + mailpit, no API or frontend container — for frontend development against an `API.Core` process run outside Docker.
- `unit.tests` builds `Dockerfile.tests`, which restores/builds against `Core.slnx` then runs `dotnet test` for every `Features/*.Tests` project in turn (`Features.Users.Tests`, `Features.Breweries.Tests`, `Features.Emails.Tests`), mocking each handler's repository/service dependencies with Moq — no real database needed. - `unit.tests` builds `Dockerfile.tests`, which restores/builds against `Biergarten.API.slnx` then runs `dotnet test` for every `Features/*.Tests` project in turn (`Features.Users.Tests`, `Features.Breweries.Tests`, `Features.Emails.Tests`, `Features.PhotoUpload.Tests`), mocking each handler's repository/service dependencies with Moq — no real database needed.
- `.trx` results are readable by Visual Studio, Azure DevOps, and GitHub Actions. - `.trx` results are readable by Visual Studio, Azure DevOps, and GitHub Actions.

View File

@@ -5,7 +5,7 @@ flowchart TB
Host -->|http://localhost:8080| DevAPI Host -->|http://localhost:8080| DevAPI
subgraph DEV["Development Environment (docker-compose.dev.yaml)"] subgraph DEV["Development Environment (docker-compose.dev.yaml)"]
DevDB[("SQL Server 2022<br/>Biergarten Database<br/>:1433")] DevDB[("SQL Server 2022<br/>Biergarten Database<br/>:1434")]
DevAPI["API Container<br/>ASP.NET Core 10<br/>:8080 HTTP / :8081 HTTPS"] DevAPI["API Container<br/>ASP.NET Core 10<br/>:8080 HTTP / :8081 HTTPS"]
DevMig["Migrations (run-once)<br/>Database.Migrations"] DevMig["Migrations (run-once)<br/>Database.Migrations"]
DevSeed["Seed (run-once)<br/>Database.Seed"] DevSeed["Seed (run-once)<br/>Database.Seed"]
@@ -21,11 +21,13 @@ flowchart TB
DevAPI -.->|depends_on| DevSeed DevAPI -.->|depends_on| DevSeed
subgraph TEST["Test Environment (docker-compose.test.yaml)"] subgraph TEST["Test Environment (docker-compose.test.yaml)"]
TestDB[("SQL Server, isolated instance<br/>Biergarten Test Database<br/>:1434")] TestDB[("SQL Server, isolated instance<br/>Biergarten Test Database<br/>no host port published")]
TestMig["Migrations (test)"] TestMig["Migrations (test)"]
TestSeed["Seed (test)<br/>minimal: test.user only"] TestSeed["Seed (test)<br/>minimal: test.user only"]
TestSeaweedFS["seaweedfs<br/>S3-compatible object storage"]
Specs["API.Specs<br/>Reqnroll + xUnit<br/>(integration tests)"] Specs["API.Specs<br/>Reqnroll + xUnit<br/>(integration tests)"]
UnitTests["unit.tests<br/>xUnit + Moq<br/>Features.*.Tests, one container"] UnitTests["unit.tests<br/>xUnit + Moq<br/>Features.*.Tests, one container"]
FrontendTests["frontend.tests<br/>Playwright/Vitest"]
end end
TestMig -->|1. Migrate| TestDB TestMig -->|1. Migrate| TestDB
@@ -34,12 +36,14 @@ flowchart TB
UnitTests -.->|depends_on for startup ordering only, no real connection| TestDB UnitTests -.->|depends_on for startup ordering only, no real connection| TestDB
TestMig -.->|depends_on| TestDB TestMig -.->|depends_on| TestDB
TestSeed -.->|depends_on| TestMig TestSeed -.->|depends_on| TestMig
TestSeed -.->|depends_on| TestSeaweedFS
Specs -.->|depends_on| TestSeed Specs -.->|depends_on| TestSeed
UnitTests -.->|depends_on| TestSeed UnitTests -.->|depends_on| TestSeed
Results[["test-results/ (mounted volume)<br/>api-specs/results.trx<br/>Features.Users.Tests.trx<br/>Features.Breweries.Tests.trx<br/>Features.Emails.Tests.trx"]] Results[["test-results/ (mounted volume)<br/>api-specs/results.trx<br/>Features.Users.Tests.trx<br/>Features.Breweries.Tests.trx<br/>Features.Emails.Tests.trx<br/>Features.PhotoUpload.Tests.trx"]]
Specs -->|Export TRX| Results Specs -->|Export TRX| Results
UnitTests -->|Export TRX, one per slice| Results UnitTests -->|Export TRX, one per slice| Results
FrontendTests -->|Export results| Results
subgraph PROD["Production Environment (docker-compose.prod.yaml)"] subgraph PROD["Production Environment (docker-compose.prod.yaml)"]
ProdDB[("SQL Server 2022<br/>Biergarten Database<br/>no host port published")] ProdDB[("SQL Server 2022<br/>Biergarten Database<br/>no host port published")]
@@ -56,21 +60,25 @@ flowchart TB
DbOnlyDB[("SQL Server<br/>:1434")] DbOnlyDB[("SQL Server<br/>:1434")]
DbOnlyMig["Migrations (run-once)"] DbOnlyMig["Migrations (run-once)"]
DbOnlySeed["Seed (run-once)"] DbOnlySeed["Seed (run-once)"]
DbOnlySeaweedFS["seaweedfs<br/>S3-compatible object storage"]
end end
DbOnlyMig -->|1. Run migrations| DbOnlyDB DbOnlyMig -->|1. Run migrations| DbOnlyDB
DbOnlySeed -->|2. Seed data| DbOnlyDB DbOnlySeed -->|2. Seed data| DbOnlyDB
DbOnlyMig -.->|depends_on| DbOnlyDB DbOnlyMig -.->|depends_on| DbOnlyDB
DbOnlySeed -.->|depends_on| DbOnlyMig DbOnlySeed -.->|depends_on| DbOnlyMig
DbOnlySeed -.->|depends_on| DbOnlySeaweedFS
subgraph MIN["Minimal Environment (docker-compose.min.yaml)"] subgraph MIN["Minimal Environment (docker-compose.min.yaml)"]
MinDB[("SQL Server<br/>:1433")] MinDB[("SQL Server<br/>:1433")]
MinMig["Migrations (run-once)"] MinMig["Migrations (run-once)"]
MinMailpit["Mailpit<br/>:8025 / :1025"] MinMailpit["Mailpit<br/>:8025 / :1025"]
MinSeed["Seed (run-once)"] MinSeed["Seed (run-once)"]
MinSeaweedFS["seaweedfs<br/>S3-compatible object storage"]
end end
MinMig -->|1. Run migrations| MinDB MinMig -->|1. Run migrations| MinDB
MinSeed -->|2. Seed data| MinDB MinSeed -->|2. Seed data| MinDB
MinMig -.->|depends_on| MinDB MinMig -.->|depends_on| MinDB
MinSeed -.->|depends_on| MinMig MinSeed -.->|depends_on| MinMig
MinSeed -.->|depends_on| MinSeaweedFS