aboutsummaryrefslogtreecommitdiffstats
path: root/apps/workers/feedWorker.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2024-11-03 18:33:52 +0000
committerMohamed Bassem <me@mbassem.com>2024-11-03 18:33:52 +0000
commitd34b538a496e3c01f6c49fe23e4360a841ceee3a (patch)
treefdcdd40fbb85473e97330e26760012435a355c8d /apps/workers/feedWorker.ts
parentfa8286aa900ea4f13c1c15d5b0f441436f042d8a (diff)
downloadkarakeep-d34b538a496e3c01f6c49fe23e4360a841ceee3a.tar.zst
feature: Schedule RSS feed refreshes every hour
Diffstat (limited to 'apps/workers/feedWorker.ts')
-rw-r--r--apps/workers/feedWorker.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/apps/workers/feedWorker.ts b/apps/workers/feedWorker.ts
index 1bd24641..2f2c80f5 100644
--- a/apps/workers/feedWorker.ts
+++ b/apps/workers/feedWorker.ts
@@ -1,5 +1,6 @@
import { and, eq, inArray } from "drizzle-orm";
import { DequeuedJob, Runner } from "liteque";
+import cron from "node-cron";
import Parser from "rss-parser";
import { buildImpersonatingTRPCClient } from "trpc";
@@ -10,6 +11,35 @@ import logger from "@hoarder/shared/logger";
import { FeedQueue } from "@hoarder/shared/queues";
import { BookmarkTypes } from "@hoarder/shared/types/bookmarks";
+export const FeedRefreshingWorker = cron.schedule(
+ "0 * * * *",
+ () => {
+ logger.info("[feed] Scheduling feed refreshing jobs ...");
+ db.query.rssFeedsTable
+ .findMany({
+ columns: {
+ id: true,
+ },
+ })
+ .then((feeds) => {
+ for (const feed of feeds) {
+ FeedQueue.enqueue(
+ {
+ feedId: feed.id,
+ },
+ {
+ idempotencyKey: feed.id,
+ },
+ );
+ }
+ });
+ },
+ {
+ runOnInit: false,
+ scheduled: false,
+ },
+);
+
export class FeedWorker {
static build() {
logger.info("Starting feed worker ...");