feat: add notifications module with bell UI, event listeners, and cleanup job
In-app notification system with topbar bell icon, dropdown panel, mark-as-read/dismiss actions, and scheduled cleanup of old read notifications. Includes event listeners for user.created and user.deleted events, authorization policy, and full test coverage. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -102,6 +102,12 @@ class UserAccountService
|
||||
];
|
||||
}
|
||||
|
||||
// Capture tenant associations before CASCADE deletes them
|
||||
$preDeletionTenantIds = array_column(
|
||||
$this->userAssignmentService->buildAssignmentsForUser($userId)['tenants'] ?? [],
|
||||
'id'
|
||||
);
|
||||
|
||||
$deleted = $this->userWriteRepository->delete($userId);
|
||||
if (!$deleted) {
|
||||
return ['ok' => false, 'status' => 500, 'error' => 'delete_failed'];
|
||||
@@ -118,6 +124,8 @@ class UserAccountService
|
||||
'user_id' => $userId,
|
||||
'uuid' => (string) ($user['uuid'] ?? ''),
|
||||
'actor_user_id' => $currentUserId,
|
||||
'display_name' => trim((string) ($user['display_name'] ?? '')),
|
||||
'tenant_ids' => $preDeletionTenantIds,
|
||||
]);
|
||||
|
||||
return ['ok' => true, 'user' => $user];
|
||||
|
||||
Reference in New Issue
Block a user