From 99c3106835054760c1cb8143a53ac2b6df420b3c Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 21 Apr 2026 21:19:16 +0200 Subject: [PATCH] feat(openapi): expose kinds param in dashboard activity spec Added @Parameter annotation so SpringDoc renders kinds as an enum-array query param; regenerated TypeScript API types. Co-Authored-By: Claude Sonnet 4.6 --- .../dashboard/DashboardController.java | 5 + frontend/src/lib/generated/api.ts | 224 +----------------- 2 files changed, 10 insertions(+), 219 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardController.java b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardController.java index 940733af..9c942b43 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardController.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardController.java @@ -1,5 +1,8 @@ package org.raddatz.familienarchiv.dashboard; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.RequiredArgsConstructor; import org.raddatz.familienarchiv.audit.AuditKind; import org.raddatz.familienarchiv.security.Permission; @@ -38,6 +41,8 @@ public class DashboardController { public List getActivity( Authentication authentication, @RequestParam(defaultValue = "7") int limit, + @Parameter(description = "Filter by audit kinds; omit for all rollup-eligible kinds", + array = @ArraySchema(schema = @Schema(implementation = AuditKind.class))) @RequestParam(required = false) Set kinds) { UUID userId = SecurityUtils.requireUserId(authentication, userService); Set effectiveKinds = (kinds == null || kinds.isEmpty()) ? AuditKind.ROLLUP_ELIGIBLE : kinds; diff --git a/frontend/src/lib/generated/api.ts b/frontend/src/lib/generated/api.ts index 32095fc9..ed48f1a2 100644 --- a/frontend/src/lib/generated/api.ts +++ b/frontend/src/lib/generated/api.ts @@ -452,38 +452,6 @@ export interface paths { patch?: never; trace?: never; }; - "/api/documents/{documentId}/comments": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["getDocumentComments"]; - put?: never; - post: operations["postDocumentComment"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/documents/{documentId}/comments/{commentId}/replies": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["replyToDocumentComment"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/api/documents/{documentId}/annotations": { parameters: { query?: never; @@ -500,38 +468,6 @@ export interface paths { patch?: never; trace?: never; }; - "/api/documents/{documentId}/annotations/{annotationId}/comments": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: operations["getAnnotationComments"]; - put?: never; - post: operations["postAnnotationComment"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/documents/{documentId}/annotations/{annotationId}/comments/{commentId}/replies": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: operations["replyToAnnotationComment"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/api/documents/quick-upload": { parameters: { query?: never; @@ -1815,17 +1751,17 @@ export interface components { /** Format: uuid */ id?: string; displayName?: string; - /** Format: int64 */ - documentCount?: number; + personType?: string; firstName?: string; lastName?: string; + /** Format: int64 */ + documentCount?: number; /** Format: int32 */ birthYear?: number; /** Format: int32 */ deathYear?: number; alias?: string; notes?: string; - personType?: string; }; SenderModel: { /** Format: uuid */ @@ -2043,7 +1979,6 @@ export interface components { count: number; /** Format: date-time */ happenedAtUntil?: string; - // MANUALLY ADDED — re-run `npm run generate:api` after the next backend deployment and re-add these fields if they are dropped /** * Format: uuid * @description Deep-link target comment; populated only for COMMENT_ADDED and MENTION_CREATED kinds. @@ -3144,81 +3079,6 @@ export interface operations { }; }; }; - getDocumentComments: { - parameters: { - query?: never; - header?: never; - path: { - documentId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DocumentComment"][]; - }; - }; - }; - }; - postDocumentComment: { - parameters: { - query?: never; - header?: never; - path: { - documentId: string; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateCommentDTO"]; - }; - }; - responses: { - /** @description Created */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DocumentComment"]; - }; - }; - }; - }; - replyToDocumentComment: { - parameters: { - query?: never; - header?: never; - path: { - documentId: string; - commentId: string; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateCommentDTO"]; - }; - }; - responses: { - /** @description Created */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DocumentComment"]; - }; - }; - }; - }; listAnnotations: { parameters: { query?: never; @@ -3267,82 +3127,6 @@ export interface operations { }; }; }; - getAnnotationComments: { - parameters: { - query?: never; - header?: never; - path: { - annotationId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DocumentComment"][]; - }; - }; - }; - }; - postAnnotationComment: { - parameters: { - query?: never; - header?: never; - path: { - documentId: string; - annotationId: string; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateCommentDTO"]; - }; - }; - responses: { - /** @description Created */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DocumentComment"]; - }; - }; - }; - }; - replyToAnnotationComment: { - parameters: { - query?: never; - header?: never; - path: { - documentId: string; - commentId: string; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateCommentDTO"]; - }; - }; - responses: { - /** @description Created */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "*/*": components["schemas"]["DocumentComment"]; - }; - }; - }; - }; quickUpload: { parameters: { query?: never; @@ -4395,6 +4179,8 @@ export interface operations { parameters: { query?: { limit?: number; + /** @description Filter by audit kinds; omit for all rollup-eligible kinds */ + kinds?: ("FILE_UPLOADED" | "STATUS_CHANGED" | "METADATA_UPDATED" | "TEXT_SAVED" | "BLOCK_REVIEWED" | "ANNOTATION_CREATED" | "COMMENT_ADDED" | "MENTION_CREATED")[]; }; header?: never; path?: never;