Initial import

This commit is contained in:
Stein Helge Riise
2025-11-17 08:32:46 +01:00
commit ede31fbb7e
129 changed files with 9514 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
# 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.