feat(server): REST-API für Ressourcen (CRUD + Download) #120

Closed
opened 2026-05-18 19:53:15 +00:00 by jreinemann-euris · 0 comments
jreinemann-euris commented 2026-05-18 19:53:15 +00:00 (Migrated from github.com)

Feature: Server – REST-API für Ressourcen

Part of: #117
Depends on: #119

Ziel

Der Server stellt vollständige CRUD- und Download-Endpoints für Ressourcen bereit; authentifizierte Nutzer können den Katalog abrufen und Dateien herunterladen, Admins können Ressourcen verwalten.

Scope

  • ResourceRoutes.kt mit folgenden Endpoints:
    • GET /api/resources – Katalog als JSON-Array (authenticated)
    • GET /api/resources/{guid}/download – Datei-Stream (authenticated, korrekte Content-Type-Header)
    • POST /api/admin/resources – Multipart-Upload: Metadaten-JSON + Datei-Part (Admin-only)
    • PUT /api/admin/resources/{guid} – Metadaten aktualisieren ohne Datei-Upload (Admin-only)
    • DELETE /api/admin/resources/{guid} – Ressource aus DB + Datei löschen (Admin-only)
  • ResourceRepository.kt (Server) für alle DB-Zugriffe
  • Route-Registrierung in Routing.kt

Technische Hinweise

  • Auth-Muster: call.principal<UserPrincipal>()?.userId + isAdmin-Check (403 für Nicht-Admins)
  • Multipart: call.receiveMultipart() – Part "metadata" (JSON) + Part "file" (Bytes)
  • Download: call.respondFile(File("/opt/bollwerk/resources/${guid}.${ext}")) mit ContentType.parse(mimeType)
  • 404 wenn Datei nicht in DB oder auf Disk fehlt

Akzeptanzkriterien

  • GET /api/resources liefert JSON-Array aller Ressourcen (authenticated)
  • Download-Endpoint streamt Datei mit korrektem Content-Type
  • Admin-POST speichert Datei als {guid}.{ext} im Volume
  • Nicht-Admins erhalten 403 bei Admin-Endpoints
  • 404 bei nicht vorhandener Ressource
  • Tests: mindestens ein Unit-Test pro Endpoint-Typ
## Feature: Server – REST-API für Ressourcen Part of: #117 Depends on: #119 ### Ziel Der Server stellt vollständige CRUD- und Download-Endpoints für Ressourcen bereit; authentifizierte Nutzer können den Katalog abrufen und Dateien herunterladen, Admins können Ressourcen verwalten. ### Scope - `ResourceRoutes.kt` mit folgenden Endpoints: - `GET /api/resources` – Katalog als JSON-Array (authenticated) - `GET /api/resources/{guid}/download` – Datei-Stream (authenticated, korrekte Content-Type-Header) - `POST /api/admin/resources` – Multipart-Upload: Metadaten-JSON + Datei-Part (Admin-only) - `PUT /api/admin/resources/{guid}` – Metadaten aktualisieren ohne Datei-Upload (Admin-only) - `DELETE /api/admin/resources/{guid}` – Ressource aus DB + Datei löschen (Admin-only) - `ResourceRepository.kt` (Server) für alle DB-Zugriffe - Route-Registrierung in `Routing.kt` ### Technische Hinweise - Auth-Muster: `call.principal<UserPrincipal>()?.userId` + `isAdmin`-Check (403 für Nicht-Admins) - Multipart: `call.receiveMultipart()` – Part "metadata" (JSON) + Part "file" (Bytes) - Download: `call.respondFile(File("/opt/bollwerk/resources/${guid}.${ext}"))` mit `ContentType.parse(mimeType)` - 404 wenn Datei nicht in DB oder auf Disk fehlt ### Akzeptanzkriterien - [ ] `GET /api/resources` liefert JSON-Array aller Ressourcen (authenticated) - [ ] Download-Endpoint streamt Datei mit korrektem `Content-Type` - [ ] Admin-`POST` speichert Datei als `{guid}.{ext}` im Volume - [ ] Nicht-Admins erhalten 403 bei Admin-Endpoints - [ ] 404 bei nicht vorhandener Ressource - [ ] Tests: mindestens ein Unit-Test pro Endpoint-Typ
Sign in to join this conversation.
No description provided.