fix(notifications): use createFromMessage directly for CLI-safe scheduler notifications
createForTenantAdminUsersFromMessage relies on listActiveUserIdsByTenantId which returns empty results in CLI context (scheduler). Instead, iterate admin users directly and call createFromMessage per user per tenant. Verified end-to-end: notification created, dedup blocks duplicates. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -57,33 +57,18 @@ final class SchedulerJobFailedNotificationListener implements EventListener
|
||||
]
|
||||
);
|
||||
|
||||
$tenantIds = $this->resolveAdminTenantIds($adminUserIds);
|
||||
|
||||
foreach ($tenantIds as $tenantId) {
|
||||
$this->notificationService->createForTenantAdminUsersFromMessage(
|
||||
$tenantId,
|
||||
$message,
|
||||
null,
|
||||
$adminSet
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect all unique tenant IDs across admin users.
|
||||
*
|
||||
* @param list<int> $userIds
|
||||
* @return list<int>
|
||||
*/
|
||||
private function resolveAdminTenantIds(array $userIds): array
|
||||
{
|
||||
$tenantIds = [];
|
||||
foreach ($userIds as $userId) {
|
||||
foreach ($this->userTenantRepository->listTenantIdsByUserId($userId) as $tenantId) {
|
||||
$tenantIds[$tenantId] = true;
|
||||
// Create notifications directly per admin user + tenant.
|
||||
// This avoids listActiveUserIdsByTenantId which requires a web-context
|
||||
// DB session — the scheduler runs in CLI where that lookup may fail.
|
||||
foreach ($adminUserIds as $userId) {
|
||||
$tenantIds = $this->userTenantRepository->listTenantIdsByUserId($userId);
|
||||
if ($tenantIds === []) {
|
||||
$this->notificationService->createFromMessage($userId, null, $message);
|
||||
continue;
|
||||
}
|
||||
foreach ($tenantIds as $tenantId) {
|
||||
$this->notificationService->createFromMessage($userId, $tenantId, $message);
|
||||
}
|
||||
}
|
||||
|
||||
return array_keys($tenantIds);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user