feat(sse): scope timeline events to affected audiences

This commit is contained in:
2026-03-30 00:40:24 +02:00
parent 819345acfa
commit fac8c1c3a5
8 changed files with 106 additions and 14 deletions
+9 -1
View File
@@ -1,5 +1,5 @@
import { loadRoleDefaults } from "@capakraken/api";
import { eventBus, permissionAudience, roleAudience, userAudience } from "@capakraken/api/sse";
import { eventBus, permissionAudience, resourceAudience, roleAudience, userAudience } from "@capakraken/api/sse";
import { startReminderScheduler } from "@capakraken/api/lib/reminder-scheduler";
import { prisma } from "@capakraken/db";
import { resolvePermissions, SSE_EVENT_TYPES, SystemRole, type PermissionOverrides } from "@capakraken/shared";
@@ -29,6 +29,11 @@ export async function GET() {
id: true,
systemRole: true,
permissionOverrides: true,
resource: {
select: {
id: true,
},
},
},
});
@@ -46,6 +51,9 @@ export async function GET() {
userAudience(dbUser.id),
roleAudience(dbUser.systemRole),
]);
if (dbUser.resource?.id) {
audiences.add(resourceAudience(dbUser.resource.id));
}
for (const permission of permissions) {
audiences.add(permissionAudience(permission));
}
+3
View File
@@ -27,6 +27,9 @@ export function useTimelineSSE() {
case SSE_EVENT_TYPES.ALLOCATION_CREATED:
case SSE_EVENT_TYPES.ALLOCATION_UPDATED:
case SSE_EVENT_TYPES.ALLOCATION_DELETED:
case SSE_EVENT_TYPES.VACATION_CREATED:
case SSE_EVENT_TYPES.VACATION_UPDATED:
case SSE_EVENT_TYPES.VACATION_DELETED:
void queryClient.invalidateQueries({ queryKey: [["timeline", "getEntries"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getEntriesView"]] });
void queryClient.invalidateQueries({ queryKey: [["timeline", "getMyEntriesView"]] });