diff --git a/src/app.ts b/src/app.ts index 82e083cc..2a36a83e 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,3 +1,4 @@ +import '@/cron.ts'; import { type Context, cors, diff --git a/src/cron.ts b/src/cron.ts new file mode 100644 index 00000000..1e08fdb8 --- /dev/null +++ b/src/cron.ts @@ -0,0 +1,17 @@ +import * as eventsDB from '@/db/events.ts'; +import { cron } from '@/deps.ts'; +import { Time } from '@/utils/time.ts'; + +/** Clean up old remote events. */ +async function cleanupEvents() { + console.log('Cleaning up old remote events...'); + + const [result] = await eventsDB.deleteFilters([{ + until: Math.floor((Date.now() - Time.days(7)) / 1000), + local: false, + }]); + + console.log(`Deleted ${result?.numDeletedRows ?? 0} events.`); +} + +cron.hourly(cleanupEvents); diff --git a/src/db/events.ts b/src/db/events.ts index 59480d38..0e03fbd6 100644 --- a/src/db/events.ts +++ b/src/db/events.ts @@ -156,7 +156,7 @@ async function getFilters( /** Delete events based on filters from the database. */ function deleteFilters(filters: DittoFilter[]) { - if (!filters.length) return Promise.resolve(); + if (!filters.length) return Promise.resolve([]); const query = getFiltersQuery(filters); return db diff --git a/src/deps.ts b/src/deps.ts index b26bd8f4..f4efc62c 100644 --- a/src/deps.ts +++ b/src/deps.ts @@ -65,5 +65,6 @@ export { } from 'npm:kysely@^0.25.0'; export { DenoSqliteDialect } from 'https://gitlab.com/soapbox-pub/kysely-deno-sqlite/-/raw/v1.0.1/mod.ts'; export { default as tldts } from 'npm:tldts@^6.0.14'; +export * as cron from 'https://deno.land/x/deno_cron@v1.0.0/cron.ts'; export type * as TypeFest from 'npm:type-fest@^4.3.0';