# Pick'n'Play Pick'n'Play is a .NET 10 ASP.NET Core Minimal API app with a static HTML/CSS/JS frontend and SQLite persistence. ## Quick Start 1. Restore and build: `dotnet build GameList.sln` 2. Apply DB migrations explicitly: `dotnet ef database update` 3. Run tests: `dotnet test GameList.Tests/GameList.Tests.csproj` 4. Run locally: `dotnet run --project GameList.csproj` 5. Open: `http://localhost:5000` (or the URL shown by `dotnet run`) ## Frontend Tooling - Install tooling: `npm install` - Lint JS: `npm run lint` - Check formatting: `npm run format:check` - Apply formatting: `npm run format` ## Core Behavior - Authentication: username/password with HttpOnly `player` cookie. - Admin authorization: authenticated account with `IsAdmin=true`. - Owner model: first valid admin-key registration becomes `owner`; admins can grant/revoke admin role for non-owner accounts. - Core invariants are DB-enforced: single owner account and non-joker suggestion cap. - Gameplay phases: `Suggest`, `Vote`, `Results`. - Storage: SQLite database under `App_Data/gamelist.db`. - Migrations are deployment-time operations (`dotnet ef database update`); app startup does not auto-migrate. - Security defaults: rate-limited auth/admin routes, baseline browser security headers, production HTTPS+HSTS enforcement. ## Module Ownership - `Program.cs`: startup wiring, middleware order, route registration. - `Endpoints/`: endpoint adapters plus application workflow services (`ServiceResult` outputs mapped to HTTP at the edge). - `Infrastructure/`: filters, middleware, identity helpers. - `Data/`: EF Core `DbContext` and migrations. - `Domain/`: entities and enums. - `Contracts/`: request/response DTOs. - `wwwroot/`: static frontend assets. - `GameList.Tests/`: integration and helper tests. - `scripts/`: deployment scripts. `scripts/deploy-ftp.ps1` is profile-driven via `scripts/deploy-ftp.profile.sample.psd1`. ## Operations - API surface and endpoint contract: `API.md` - Product/feature expectations: `SPEC.md` - IIS deployment notes: `IIS.md` - Test strategy details: `TESTS.md` ## CI GitHub Actions workflow: `.github/workflows/ci.yml` - Restores dependencies - Runs frontend lint and format checks - Builds with warnings treated as errors - Runs `GameList.Tests` with coverage collection - Enforces minimum coverage thresholds (line 90%, branch 70%)