From 65994286b24d373624f0cb45dcbb318aca92168f Mon Sep 17 00:00:00 2001 From: Matthias Hochmeister Date: Tue, 24 Mar 2026 14:44:21 +0100 Subject: [PATCH] rework issue system --- .../src/controllers/permission.controller.ts | 13 ++++++- .../054_rename_ausruestungsanfrage_labels.sql | 7 ++++ .../src/components/admin/BestellungenTab.tsx | 4 +- .../components/admin/DataManagementTab.tsx | 2 +- frontend/src/components/chat/ChatPanel.tsx | 39 ++++++++++++++----- frontend/src/contexts/PermissionContext.tsx | 2 +- 6 files changed, 53 insertions(+), 14 deletions(-) create mode 100644 backend/src/database/migrations/054_rename_ausruestungsanfrage_labels.sql diff --git a/backend/src/controllers/permission.controller.ts b/backend/src/controllers/permission.controller.ts index 02548e8..dd97e79 100644 --- a/backend/src/controllers/permission.controller.ts +++ b/backend/src/controllers/permission.controller.ts @@ -22,11 +22,22 @@ class PermissionController { permissions = permissionService.getEffectivePermissions(groups); } + const maintenance = permissionService.getMaintenanceFlags(); + + logger.debug('GET /api/permissions/me', { + email: req.user?.email, + groups, + isAdmin, + permissionsCount: permissions.length, + maintenanceWissen: maintenance['wissen'] ?? false, + maintenanceAusruestungsanfrage: maintenance['ausruestungsanfrage'] ?? false, + }); + res.json({ success: true, data: { permissions, - maintenance: permissionService.getMaintenanceFlags(), + maintenance, isAdmin, }, }); diff --git a/backend/src/database/migrations/054_rename_ausruestungsanfrage_labels.sql b/backend/src/database/migrations/054_rename_ausruestungsanfrage_labels.sql new file mode 100644 index 0000000..299f95b --- /dev/null +++ b/backend/src/database/migrations/054_rename_ausruestungsanfrage_labels.sql @@ -0,0 +1,7 @@ +-- Update feature_groups label +UPDATE feature_groups SET label = 'Interne Bestellungen' WHERE id = 'ausruestungsanfrage'; + +-- Update permission descriptions to remove "Shop-" references +UPDATE permissions SET description = 'Katalog einsehen' WHERE id = 'ausruestungsanfrage:view'; +UPDATE permissions SET description = 'Artikel im Katalog verwalten' WHERE id = 'ausruestungsanfrage:manage_catalog'; +UPDATE permissions SET description = 'Dashboard-Widget für Anfragen' WHERE id = 'ausruestungsanfrage:widget'; diff --git a/frontend/src/components/admin/BestellungenTab.tsx b/frontend/src/components/admin/BestellungenTab.tsx index fd6c741..54e71d4 100644 --- a/frontend/src/components/admin/BestellungenTab.tsx +++ b/frontend/src/components/admin/BestellungenTab.tsx @@ -44,11 +44,11 @@ function BestellungenTab() { return ( - {/* Pending Ausrüstungsanfragen */} + {/* Pending interne Bestellungen */} {(requests?.length ?? 0) > 0 && ( - Offene Ausrüstungsanfragen ({requests?.length}) + Offene interne Bestellungen ({requests?.length}) {requestsLoading ? ( diff --git a/frontend/src/components/admin/DataManagementTab.tsx b/frontend/src/components/admin/DataManagementTab.tsx index f9743cd..d93020e 100644 --- a/frontend/src/components/admin/DataManagementTab.tsx +++ b/frontend/src/components/admin/DataManagementTab.tsx @@ -34,7 +34,7 @@ interface ResetSection { const RESET_SECTIONS: ResetSection[] = [ { key: 'reset-bestellungen', label: 'Bestellungen zuruecksetzen', description: 'Alle Bestellungen, Positionen, Dateien, Erinnerungen und Historie loeschen und Nummern zuruecksetzen.' }, - { key: 'reset-ausruestung-anfragen', label: 'Ausruestungsanfragen zuruecksetzen', description: 'Alle Ausruestungsanfragen und zugehoerige Positionen loeschen und Nummern zuruecksetzen.' }, + { key: 'reset-ausruestung-anfragen', label: 'Interne Bestellungen zuruecksetzen', description: 'Alle internen Bestellungen und zugehoerige Positionen loeschen und Nummern zuruecksetzen.' }, { key: 'reset-issues', label: 'Issues zuruecksetzen', description: 'Alle Issues und Kommentare loeschen und Nummern zuruecksetzen.' }, ]; diff --git a/frontend/src/components/chat/ChatPanel.tsx b/frontend/src/components/chat/ChatPanel.tsx index 1d924f2..7e04fb7 100644 --- a/frontend/src/components/chat/ChatPanel.tsx +++ b/frontend/src/components/chat/ChatPanel.tsx @@ -195,7 +195,7 @@ const ChatPanelInner: React.FC = () => { sx={{ display: { xs: 'none', sm: 'flex' }, flexDirection: 'column', - width: 56, + width: 120, flexShrink: 0, borderRight: 1, borderColor: 'divider', @@ -207,12 +207,21 @@ const ChatPanelInner: React.FC = () => { const isSelected = room.token === selectedRoomToken; return ( - selectRoom(room.token)} sx={{ - mx: 'auto', - my: 0.25, - p: 0.5, + display: 'flex', + alignItems: 'center', + gap: 0.75, + px: 1, + py: 0.5, + cursor: 'pointer', + borderRadius: 1, + mx: 0.5, + bgcolor: isSelected ? 'action.selected' : 'transparent', + '&:hover': { + bgcolor: isSelected ? 'action.selected' : 'action.hover', + }, }} > { > {room.displayName.substring(0, 2).toUpperCase()} - + + {room.displayName} + + ); })} diff --git a/frontend/src/contexts/PermissionContext.tsx b/frontend/src/contexts/PermissionContext.tsx index 631785f..c911d53 100644 --- a/frontend/src/contexts/PermissionContext.tsx +++ b/frontend/src/contexts/PermissionContext.tsx @@ -28,7 +28,7 @@ export const PermissionProvider: React.FC = ({ children queryKey: ['my-permissions'], queryFn: permissionsApi.getMyPermissions, enabled: isAuthenticated, - staleTime: 5 * 60 * 1000, + staleTime: 60 * 1000, }); const permissions = useMemo(