Files
minattest/backend/README.md
T
Stein Helge Riise ede31fbb7e Initial import
2025-11-17 08:32:46 +01:00

82 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 Servercontainer 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/` domenemodeller (POCOs, enums)
- `src/MinAttest.Infrastructure/` EF Core (DbContext, migrasjoner, designtime 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 toolmanifest i `backend/.config`.
- Kjør fra `backend/` mappen:
- Legg til migrasjon (prosjekt: Infrastructure, startup: Api):
- `dotnet tool run dotnet-ef migrations add <Navn> --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 APIendepunktet over, eksponeres også standard healthendepunkter via ServiceDefaults i utviklingsmiljø:
- Readiness: `GET /health` inkluderer DBsjekk (EF Core `AddDbContextCheck`).
- Liveness: `GET /alive` enkel "self"sjekk.
**Navngiving av endpoints (refaktorering)**
- Extensionmetodene 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)
- DBconstraint sikrer konsistente kombinasjoner av `EmployerId`/`Status`.
**CORS (dev)**
- Devorigins er konfigurert i `src/MinAttest.Api/appsettings.Development.json` under `Cors:AllowedOrigins`.
- Hvis ingen origins er satt, er CORS av (ingen crossorigin tillatt).
**Videre**
- Auth (BankID/Entra via B2C) legges på senere.
- Blob Storage (SAS) for reelle nedlastingslenker.
- ProdCORS settes eksplisitt når frontenddomene er klart.