nextcloud/apps/files_reminders/lib/BackgroundJob/ScheduledNotifications.php
Git'Fellow 1d8f788230 fix(files_reminders): keep batch alive on per-row failure
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2026-05-24 17:10:29 +02:00

48 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\FilesReminders\BackgroundJob;
use OCA\FilesReminders\Db\ReminderMapper;
use OCA\FilesReminders\Service\ReminderService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
use Psr\Log\LoggerInterface;
use Throwable;
class ScheduledNotifications extends TimedJob {
public function __construct(
ITimeFactory $time,
protected ReminderMapper $reminderMapper,
protected ReminderService $reminderService,
protected LoggerInterface $logger,
) {
parent::__construct($time);
$this->setInterval(60);
}
/**
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
#[\Override]
public function run($argument) {
$reminders = $this->reminderMapper->findOverdue();
foreach ($reminders as $reminder) {
try {
$this->reminderService->send($reminder);
} catch (Throwable $e) {
// A single broken reminder (e.g. orphaned user record) must not
// stall the rest of the queue, which is ordered by due_date ASC
// and would otherwise re-hit the same row on every cron tick.
$this->logger->error('Could not send notification for reminder with id ' . $reminder->getId(), ['exception' => $e]);
}
}
}
}