]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat(files_reminders): add background jobs
authorChristopher Ng <chrng8@gmail.com>
Mon, 31 Jul 2023 19:10:50 +0000 (12:10 -0700)
committerChristopher Ng <chrng8@gmail.com>
Thu, 3 Aug 2023 22:30:11 +0000 (15:30 -0700)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
apps/files_reminders/lib/BackgroundJob/CleanUpReminders.php [new file with mode: 0644]
apps/files_reminders/lib/BackgroundJob/ScheduledNotifications.php [new file with mode: 0644]

diff --git a/apps/files_reminders/lib/BackgroundJob/CleanUpReminders.php b/apps/files_reminders/lib/BackgroundJob/CleanUpReminders.php
new file mode 100644 (file)
index 0000000..43d0afe
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2023 Christopher Ng <chrng8@gmail.com>
+ *
+ * @author Christopher Ng <chrng8@gmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\FilesReminders\BackgroundJob;
+
+use OCA\FilesReminders\Service\ReminderService;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\BackgroundJob\IJob;
+use OCP\BackgroundJob\TimedJob;
+
+class CleanUpReminders extends TimedJob {
+       public function __construct(
+               private ITimeFactory $time,
+               private ReminderService $reminderService,
+       ) {
+               parent::__construct($time);
+               $this->setInterval(60 * 60 * 24);
+               $this->setTimeSensitivity(IJob::TIME_INSENSITIVE);
+       }
+
+       /**
+        * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+        */
+       protected function run($argument) {
+               $this->reminderService->cleanUp(500);
+       }
+}
diff --git a/apps/files_reminders/lib/BackgroundJob/ScheduledNotifications.php b/apps/files_reminders/lib/BackgroundJob/ScheduledNotifications.php
new file mode 100644 (file)
index 0000000..9efb6ac
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright 2023 Christopher Ng <chrng8@gmail.com>
+ *
+ * @author Christopher Ng <chrng8@gmail.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\FilesReminders\BackgroundJob;
+
+use OCA\FilesReminders\Db\ReminderMapper;
+use OCA\FilesReminders\Service\ReminderService;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\BackgroundJob\Job;
+use Psr\Log\LoggerInterface;
+use Throwable;
+
+class ScheduledNotifications extends Job {
+       public function __construct(
+               protected ITimeFactory $time,
+               protected ReminderMapper $reminderMapper,
+               protected ReminderService $reminderService,
+               protected LoggerInterface $logger,
+       ) {
+               parent::__construct($time);
+       }
+
+       /**
+        * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+        */
+       public function run($argument) {
+               $reminders = $this->reminderMapper->findToRemind();
+               foreach ($reminders as $reminder) {
+                       try {
+                               $this->reminderService->send($reminder);
+                       } catch (DoesNotExistException $e) {
+                               $this->logger->debug('Could not send notification for reminder with id ' . $reminder->getId());
+                       } catch (Throwable $th) {
+                               $this->logger->error($th->getMessage(), $th->getTrace());
+                       }
+               }
+       }
+}