flowchart TB Developer(["Developer"]) Host[["Docker Host"]] Developer -->|docker compose up| Host Host -->|http://localhost:8080| DevAPI subgraph DEV["Development Environment (docker-compose.dev.yaml)"] DevDB[("SQL Server 2022
Biergarten Database
:1433")] DevAPI["API Container
ASP.NET Core 10
:8080 HTTP / :8081 HTTPS"] DevMig["Migrations (run-once)
Database.Migrations"] DevSeed["Seed (run-once)
Database.Seed"] DevMailpit["Mailpit
:8025 Web UI / :1025 SMTP"] end DevMig -->|1. Run migrations| DevDB DevSeed -->|2. Seed data| DevDB DevAPI -->|3. Connect and serve| DevDB DevAPI -.->|4. SMTP_HOST/PORT| DevMailpit DevMig -.->|depends_on| DevDB DevSeed -.->|depends_on| DevMig DevAPI -.->|depends_on| DevSeed subgraph TEST["Test Environment (docker-compose.test.yaml)"] TestDB[("SQL Server, isolated instance
Biergarten Test Database
:1434")] TestMig["Migrations (test)"] TestSeed["Seed (test)
minimal: test.user only"] Specs["API.Specs
Reqnroll + xUnit
(integration tests)"] UnitTests["unit.tests
xUnit + Moq
Features.*.Tests, one container"] end TestMig -->|1. Migrate| TestDB TestSeed -->|2. Seed| TestDB Specs -->|3. Integration test| TestDB UnitTests -.->|depends_on for startup ordering only, no real connection| TestDB TestMig -.->|depends_on| TestDB TestSeed -.->|depends_on| TestMig Specs -.->|depends_on| TestSeed UnitTests -.->|depends_on| TestSeed Results[["test-results/ (mounted volume)
api-specs/results.trx
Features.Users.Tests.trx
Features.Breweries.Tests.trx
Features.Emails.Tests.trx"]] Specs -->|Export TRX| Results UnitTests -->|Export TRX, one per slice| Results subgraph PROD["Production Environment (docker-compose.prod.yaml)"] ProdDB[("SQL Server 2022
Biergarten Database
no host port published")] ProdMig["Migrations (run-once)"] ProdAPI["API Container
ASP.NET Core 10
:8080 HTTP / :8081 HTTPS"] end ProdMig -->|1. Run migrations| ProdDB ProdAPI -->|2. Connect and serve| ProdDB ProdMig -.->|depends_on| ProdDB ProdAPI -.->|"depends_on: sql-server healthy (not migrations/seed)"| ProdDB subgraph DBONLY["Database-only Environment (docker-compose.db.yaml)"] DbOnlyDB[("SQL Server
:1434")] DbOnlyMig["Migrations (run-once)"] DbOnlySeed["Seed (run-once)"] end DbOnlyMig -->|1. Run migrations| DbOnlyDB DbOnlySeed -->|2. Seed data| DbOnlyDB DbOnlyMig -.->|depends_on| DbOnlyDB DbOnlySeed -.->|depends_on| DbOnlyMig subgraph MIN["Minimal Environment (docker-compose.min.yaml)"] MinDB[("SQL Server
:1433")] MinMig["Migrations (run-once)"] MinMailpit["Mailpit
:8025 / :1025"] MinSeed["Seed (run-once)"] end MinMig -->|1. Run migrations| MinDB MinSeed -->|2. Seed data| MinDB MinMig -.->|depends_on| MinDB MinSeed -.->|depends_on| MinMig