4.2 KiB
4.2 KiB
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 backendsrc/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(feltConnectionStrings: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 <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
- Legg til migrasjon (prosjekt: Infrastructure, startup: Api):
Viktige endepunkter (POC)
- Health:
GET /api/v1/health– svarer200 OKnår API og database er tilgjengelig, ellers503 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}/downloadPOST /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 CoreAddDbContextCheck). - Liveness:
GET /alive– enkel "self"‑sjekk.
- Readiness:
Navngiving av endpoints (refaktorering)
- Extension‑metodene for routing bruker ikke lenger postfixen "Endpoints".
MapHealthEndpoints→MapHealthMapPersonsEndpoints→MapPersonsMapEmployerEndpoints→MapEmployerMapShareLinksEndpoints→MapShareLinks
Domenemodell (kjerne)
- Person (Persons) ↔ Attest (Attests): 1:n (obligatorisk FK
PersonId) - Employer (Employers) ↔ Attest: 1:n (valgfri FK
EmployerId) - Uverifisert attest:
EmployerId = nullogStatus = Unverified - Verifisert:
EmployerId != nullogStatus = Issued(ellerRevokedved tilbaketrekking) - DB‑constraint sikrer konsistente kombinasjoner av
EmployerId/Status.
CORS (dev)
- Dev‑origins er konfigurert i
src/MinAttest.Api/appsettings.Development.jsonunderCors: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.