Initial import
This commit is contained in:
@@ -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 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 <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 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.
|
||||
Reference in New Issue
Block a user