Mijn aanvragen (C): FE contracts + applications adapter + parse boundary

- Regenerate the NSwag client against the new backend endpoints (application +
  content methods, Aanvraag DTOs) — clears the API-client drift.
- registratie/domain/aanvraag.ts: FE domain view — AanvraagType + AanvraagStatus
  discriminated union (illegal states unrepresentable) + Aanvraag/AanvraagDetail.
  Lives in registratie: the dashboard consumes it, downstream wizards produce it.
- ApplicationsAdapter (infrastructure, the only new network surface): list resource
  + create/syncDraft/cancel/submit commands, with a hand-written parse* boundary
  (parseAanvraagStatus/parseApplicationSummary/parseApplications/parseApplicationDetail)
  mapping untrusted DTO -> domain, per ADR-0001. Spec covers each status tag + rejects.
- UploadAdapter.contentUrl(id): direct href for preview/download (browser opens it).

Gates green: dotnet test 56, vitest 122, lint, build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-01 11:41:57 +02:00
parent 7b6aac394b
commit 6f250cd987
6 changed files with 955 additions and 0 deletions

View File

@@ -312,6 +312,31 @@
}
}
},
"/api/v1/uploads/{documentId}/content": {
"get": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"parameters": [
{
"name": "documentId",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
},
"404": {
"description": "Not Found"
}
}
}
},
"/api/v1/uploads/status": {
"get": {
"tags": [
@@ -402,6 +427,205 @@
}
}
}
},
"/api/v1/applications": {
"get": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ApplicationSummaryDto"
}
}
}
}
}
}
},
"post": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateApplicationRequest"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApplicationDetailDto"
}
}
}
}
}
}
},
"/api/v1/applications/{id}": {
"get": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApplicationDetailDto"
}
}
}
},
"404": {
"description": "Not Found"
}
}
},
"put": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DraftSyncRequest"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "No Content"
},
"404": {
"description": "Not Found"
}
}
},
"delete": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": "No Content"
},
"409": {
"description": "Conflict",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found"
}
}
}
},
"/api/v1/applications/{id}/submit": {
"post": {
"tags": [
"BigRegister.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubmitApplicationRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SubmitApplicationResponse"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/problem+json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found"
}
}
}
}
},
"components": {
@@ -424,6 +648,38 @@
},
"additionalProperties": false
},
"AanvraagStatusDto": {
"type": "object",
"properties": {
"tag": {
"type": "string",
"nullable": true
},
"stepIndex": {
"type": "integer",
"format": "int32",
"nullable": true
},
"stepCount": {
"type": "integer",
"format": "int32",
"nullable": true
},
"referentie": {
"type": "string",
"nullable": true
},
"manual": {
"type": "boolean",
"nullable": true
},
"reden": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"AdresDto": {
"type": "object",
"properties": {
@@ -442,6 +698,81 @@
},
"additionalProperties": false
},
"ApplicationDetailDto": {
"type": "object",
"properties": {
"id": {
"type": "string",
"nullable": true
},
"type": {
"type": "string",
"nullable": true
},
"status": {
"$ref": "#/components/schemas/AanvraagStatusDto"
},
"draft": {
"nullable": true
},
"documentIds": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"createdAt": {
"type": "string",
"nullable": true
},
"updatedAt": {
"type": "string",
"nullable": true
},
"submittedAt": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"ApplicationSummaryDto": {
"type": "object",
"properties": {
"id": {
"type": "string",
"nullable": true
},
"type": {
"type": "string",
"nullable": true
},
"status": {
"$ref": "#/components/schemas/AanvraagStatusDto"
},
"documentIds": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"createdAt": {
"type": "string",
"nullable": true
},
"updatedAt": {
"type": "string",
"nullable": true
},
"submittedAt": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"BrpAddressDto": {
"type": "object",
"properties": {
@@ -472,6 +803,16 @@
},
"additionalProperties": false
},
"CreateApplicationRequest": {
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"DashboardViewDto": {
"type": "object",
"properties": {
@@ -543,6 +884,28 @@
},
"additionalProperties": false
},
"DraftSyncRequest": {
"type": "object",
"properties": {
"draft": { },
"stepIndex": {
"type": "integer",
"format": "int32"
},
"stepCount": {
"type": "integer",
"format": "int32"
},
"documentIds": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
}
},
"additionalProperties": false
},
"DuoDiplomaDto": {
"type": "object",
"properties": {
@@ -806,6 +1169,41 @@
},
"additionalProperties": false
},
"SubmitApplicationRequest": {
"type": "object",
"properties": {
"diplomaHerkomst": {
"type": "string",
"nullable": true
},
"uren": {
"type": "integer",
"format": "int32",
"nullable": true
},
"documents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DocumentRefDto"
},
"nullable": true
}
},
"additionalProperties": false
},
"SubmitApplicationResponse": {
"type": "object",
"properties": {
"referentie": {
"type": "string",
"nullable": true
},
"status": {
"$ref": "#/components/schemas/AanvraagStatusDto"
}
},
"additionalProperties": false
},
"UploadCategoriesDto": {
"type": "object",
"properties": {