Tjenesten tar imot en strukturert JSON, renderer den til HTML og konverterer resultatet til PDF via Gotenberg. API-serveren er bygget med Hono på Bun.
Følgende rapporter støttes:
- BYG0011 - Byggrapport
Løsningen er delt over to selvstendige repoer:
| Repo | Beskrivelse |
|---|---|
| matrikkel-dokument-generering | Dette repoet (inneholder nå både API, klient og lokal mock-data). |
| pdf-generator | Gotenberg-tjenesten (Docker-image) som API-serveren bruker til HTML→PDF. |
Lokal mock-data: Test-fixtures og mock-server-logikk er nå integrert lokalt i src/mock/. Se Lokal HTML-preview med mockdata for brukseksempler.
- Installer Bun
- Installer Node
- Installer avhengigheter:
bun install
- Kjør klienten og API-serveren med hot reload:
bun run dev - Kjør linting (med og uten fiksing):
bun run lint:fixogbun run lint - Kjør tester:
bun run test - Kjør visuelle regresjonstester:
bun run test:visual - Formatter prosjektet (med og uten endringer):
bun run formatogbun run format:check - Bygg produksjonsartefakter (
dist/):bun run build - Forhåndsvis produksjonsbygg:
bun run preview
For å teste dokumentrendring i nettleseren (uten PDF-generering), bruk URL-mønsteret:
/{RAPPORTKODE}/{test-case}
Testcaser er definert i src/mock/preview-data.ts. Eksempler:
http://localhost:5173/BYG0011/standard- Alias forbygg-32-341(eneboliger)http://localhost:5173/BYG0011/bygg-32-341- Eneboliger - Hagan terrasse 15Bhttp://localhost:5173/BYG0011/bygg-42-221- Stort anlegg - Rikshospitalethttp://localhost:5173/BYG0011/bygg-stasjonsveien-1- Skole og garasjerhttp://localhost:5173/BYG0011/bygg-slottsplassen-1- Historisk bygg - Slottethttp://localhost:5173/BYG0011/bygg-109-8- Bygg i arbeidhttp://localhost:5173/BYG0011/bygg-alle-5- Oversikt - alle 5 bygg (aggregert rapport)
I dev-modus proxier Vite denne URL-en til API-endepunktet /preview/{RAPPORTKODE}/{test-case}?format=html. Mock-data lastes og normaliseres mot BYG0011-skjemaet ved hver forespørsel.
API-endepunktet /preview/ støtter begge output-formater:
?format=html(standard) - HTML-preview i nettleser?format=pdf- PDF-generering via Gotenberg
Prosjektet har Playwright-tester som tar snapshots av HTML-preview for BYG0011-caser.
Disse ligger i en egen mappe: visual-tests/.
Testoppsettet er stabilisert for tvers av maskiner/OS med fast locale/tidssone/skjermskala og en liten piksel-toleranse for renderer-forskjeller.
- Kjør testene:
bun run test:visual - Oppdater snapshots etter en bevisst UI-endring:
bun run test:visual:update
Visuelle regresjonstester kjøres også i CI (Build and deploy-workflow) og må passere før image bygges/pushes fra main.
Første baseline dekker disse casene:
bygg-32-341bygg-42-221bygg-stasjonsveien-1bygg-slottsplassen-1bygg-109-8
Merk: Aggregert caset bygg-alle-5 er ikke med i baseline fordi mock-data inkluderer dynamisk tidsstempel (generertTidspunkt) som kan gjøre snapshot-differ ustabile.
Dette gjelder både /preview/{RAPPORTKODE}/{test-case} og /create-document/{RAPPORTKODE} (POST med JSON-payload).
Det er satt opp en pre-commit hook med Husky som sørger for at formattering automatisk kjøres på alle commits.
bun run devAPI-serveren er avhengig av at Gotenberg kjører.
-
Start Gotenberg (se: /kartverket/pdf-generator)
-
Start klienten og API-serveren:
bun run dev
- Klienten kjører på http://localhost:5173
- API-serveren kjører på http://localhost:3000
-
Test at den svarer:
curl http://localhost:3000/internal/isAlive # -> Alive curl -X POST http://localhost:3000/create-document/BYG0011 \ -H "Content-Type: application/json" \ --data @rapport.json \ --output rapport.pdf
Miljøvariablene valideres ved oppstart i src/config/env.ts.
| Variabel | Standard | Beskrivelse |
|---|---|---|
PORT |
3000 |
Port API-serveren lytter på. |
GOTENBERG_URL |
http://0.0.0.0:8089 |
URL til Gotenberg-tjenesten. |
GOTENBERG_TIMEOUT_MS |
10000 |
Tidsavbrudd mot Gotenberg i ms. |
Endepunkter:
| Metode | Sti | Beskrivelse |
|---|---|---|
POST |
/create-document/{rapportKode} |
Validerer rapport og returnerer PDF (application/pdf). Støttede koder: BYG0011. |
GET |
/internal/isAlive |
Liveness-probe (returnerer Alive). |
GET |
/internal/isReady |
Readiness-probe (returnerer Ready). |
GET |
/internal/metrics |
Prometheus-metrikker for tjenesten. |
GET |
/openapi.json |
Dynamisk generert OpenAPI-spesifikasjon. |
GET |
/docs |
Interaktiv Swagger UI. |
Dockerfile bygger og kjører API-serveren i produksjon. I containeren settes
PORT=8087.
docker build -t matrikkel-dokument-generering .
docker run -p 8087:8087 -e GOTENBERG_URL=http://host.docker.internal:8089 \
matrikkel-dokument-generering