Skip to content

feat(web): applicant self-service — withdraw, export & delete (DSGVO)#54

Merged
Musiker15 merged 1 commit into
mainfrom
feat/slice-8d-self-service
Jun 20, 2026
Merged

feat(web): applicant self-service — withdraw, export & delete (DSGVO)#54
Musiker15 merged 1 commit into
mainfrom
feat/slice-8d-self-service

Conversation

@Musiker15

Copy link
Copy Markdown
Member

Phase 1 finish — Task 4/5: Applicant self-service (DSGVO)

Applicants can manage their own submission from the public status page — capability model (the submission UUID, no login). Concept §10 (withdraw) / §19 (access, portability, erasure).

  • POST /api/submissions/[id]/withdraw — sets status to withdrawn (+ public event) unless already terminal. Rate-limited.
  • GET /api/submissions/[id]/export — downloads the submission as JSON (answers, status, public events, file metadata) — data portability.
  • DELETE /api/submissions/[id] — erases the submission (cascades events + file rows) and deletes the stored objects from MinIO (lib/s3.deleteObject). Rate-limited.
  • status page gains a "Your data" section (withdraw / export / delete) via a client component with confirm dialogs; withdraw hides once the status is terminal.
  • i18n — status self-service labels (DE/EN).

Verification

  • pnpm typecheck ✅ · pnpm lint ✅ · pnpm test ✅ · pnpm build ✅ (3 new routes registered)

Give applicants control over their own submission from the public status page
(capability model: the submission UUID, no login needed). Concept §10/§19.

- POST /api/submissions/[id]/withdraw — sets status to withdrawn (+ public
  event) unless already terminal. Rate-limited.
- GET /api/submissions/[id]/export — downloads the submission as JSON
  (answers, status, public events, file metadata) — data portability.
- DELETE /api/submissions/[id] — erases the submission (cascades events +
  file rows) and deletes the stored objects from MinIO (lib/s3.deleteObject).
  Rate-limited.
- status page gains a 'Your data' section (withdraw / export / delete) via a
  client component with confirm dialogs; withdraw is hidden once terminal.
- i18n: status self-service labels (DE/EN).
@Musiker15 Musiker15 merged commit 06ed0e7 into main Jun 20, 2026
3 checks passed
@Musiker15 Musiker15 deleted the feat/slice-8d-self-service branch June 20, 2026 16:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant