# MinAttest Backend Backend for MinAttest som .NET 9 Web API, EF Core (SQL Server) og .NET Aspire for lokal orkestrering (API + databaser i Docker). **Hovedpunkter** - API under `/api/v1` (uten autentisering – POC). - EF Core med SQL Server og migrasjoner. Status på attester normaliseres automatisk ved lagring. - .NET Aspire AppHost starter SQL Server‑container og injiserer connection string til API. **Struktur** - `MinAttest.sln` – løsning for backend - `src/MinAttest.Api/` – Web API (.http testkall, CORS, routing) - `src/MinAttest.Domain/` – domene‑modeller (POCOs, enums) - `src/MinAttest.Infrastructure/` – EF Core (DbContext, migrasjoner, design‑time factory) - `MinAttest.AppHost/` – .NET Aspire AppHost (Docker orkestrering: SQL Server + API) - `MinAttest.ServiceDefaults/` – felles konfig (telemetri, health, m.m.) **Forutsetninger** - .NET SDK 9.x (`dotnet --info`) - Docker Desktop i gang (for AppHost/SQL Server) **Kjøre lokalt (anbefalt: Aspire)** - Start alt (API + SQL Server i Docker): - `dotnet run --project backend/MinAttest.AppHost` - AppHost eksponerer API og oppretter databasen. API kjører `Migrate()` ved oppstart. **Kjøre kun API (uten Aspire)** - Sørg for en kjørende SQL Server lokalt/ekstern. - Sett connection string i `src/MinAttest.Api/appsettings.Development.json` (felt `ConnectionStrings:Default`). - Start API: `dotnet run --project backend/src/MinAttest.Api/MinAttest.Api.csproj` **EF Core (migrasjoner)** - Verktøy er installert lokalt via tool‑manifest i `backend/.config`. - Kjør fra `backend/` mappen: - Legg til migrasjon (prosjekt: Infrastructure, startup: Api): - `dotnet tool run dotnet-ef migrations add --project src/MinAttest.Infrastructure/MinAttest.Infrastructure.csproj --startup-project src/MinAttest.Api/MinAttest.Api.csproj --output-dir Data/Migrations` - Oppdater database: - `dotnet tool run dotnet-ef database update --project src/MinAttest.Infrastructure/MinAttest.Infrastructure.csproj --startup-project src/MinAttest.Api/MinAttest.Api.csproj` **Viktige endepunkter (POC)** - Health: `GET /api/v1/health` – svarer `200 OK` når API og database er tilgjengelig, ellers `503 Service Unavailable`. - Persons: `POST /api/v1/persons`, `GET /api/v1/persons/{id}` - Employers: `POST /api/v1/employers`, `GET /api/v1/employers`, `GET /api/v1/employers/{id}` - Attests (lagring/lesing): - `GET /api/v1/attests?personId=&employerId=&take=` - `GET /api/v1/attests/{id}` - `GET /api/v1/attests/{id}/download` - `POST /api/v1/attests/uploads` (POC) - `POST /api/v1/attests/uploads/{uploadId}/complete` (skaper attest i DB) - Shares: `POST/GET/DELETE /api/v1/attests/{id}/shares...` - Verify: `GET /api/v1/verify/{code}` Se også `src/MinAttest.Api/MinAttest.Api.http` for eksempelkall. **Health checks** - I tillegg til API‑endepunktet over, eksponeres også standard health‑endepunkter via ServiceDefaults i utviklingsmiljø: - Readiness: `GET /health` – inkluderer DB‑sjekk (EF Core `AddDbContextCheck`). - Liveness: `GET /alive` – enkel "self"‑sjekk. **Navngiving av endpoints (refaktorering)** - Extension‑metodene for routing bruker ikke lenger postfixen "Endpoints". - `MapHealthEndpoints` → `MapHealth` - `MapPersonsEndpoints` → `MapPersons` - `MapEmployerEndpoints` → `MapEmployer` - `MapShareLinksEndpoints` → `MapShareLinks` **Domenemodell (kjerne)** - Person (Persons) ↔ Attest (Attests): 1:n (obligatorisk FK `PersonId`) - Employer (Employers) ↔ Attest: 1:n (valgfri FK `EmployerId`) - Uverifisert attest: `EmployerId = null` og `Status = Unverified` - Verifisert: `EmployerId != null` og `Status = Issued` (eller `Revoked` ved tilbaketrekking) - DB‑constraint sikrer konsistente kombinasjoner av `EmployerId`/`Status`. **CORS (dev)** - Dev‑origins er konfigurert i `src/MinAttest.Api/appsettings.Development.json` under `Cors:AllowedOrigins`. - Hvis ingen origins er satt, er CORS av (ingen cross‑origin tillatt). **Videre** - Auth (BankID/Entra via B2C) legges på senere. - Blob Storage (SAS) for reelle nedlastingslenker. - Prod‑CORS settes eksplisitt når frontend‑domene er klart.