# 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. Run tests:
   `dotnet test GameList.Tests/GameList.Tests.csproj`
3. Run locally:
   `dotnet run --project GameList.csproj`
4. 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`.
- Gameplay phases: `Suggest`, `Vote`, `Results`.
- Storage: SQLite database under `App_Data/gamelist.db`.

## Module Ownership

- `Program.cs`: startup wiring, middleware order, route registration.
- `Endpoints/`: HTTP endpoint transport + request orchestration.
- `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.

## 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`
