From 72d5d9d17ab8a607b8430130639b03139663bea1 Mon Sep 17 00:00:00 2001
From: Dragory <2606411+Dragory@users.noreply.github.com>
Date: Sat, 9 Oct 2021 12:18:19 +0300
Subject: [PATCH] chore: move saved message clean-up loop with other global
 loops

---
 backend/src/data/GuildSavedMessages.ts            | 15 ---------------
 backend/src/data/loops/savedMessageCleanupLoop.ts | 14 ++++++++++++++
 backend/src/index.ts                              |  3 +++
 3 files changed, 17 insertions(+), 15 deletions(-)
 create mode 100644 backend/src/data/loops/savedMessageCleanupLoop.ts

diff --git a/backend/src/data/GuildSavedMessages.ts b/backend/src/data/GuildSavedMessages.ts
index 2747b7b1..15a5c319 100644
--- a/backend/src/data/GuildSavedMessages.ts
+++ b/backend/src/data/GuildSavedMessages.ts
@@ -2,26 +2,11 @@ import { GuildChannel, Message } from "discord.js";
 import moment from "moment-timezone";
 import { getRepository, Repository } from "typeorm";
 import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity";
-import { isAPI } from "../globals";
 import { QueuedEventEmitter } from "../QueuedEventEmitter";
-import { MINUTES, SECONDS } from "../utils";
 import { BaseGuildRepository } from "./BaseGuildRepository";
-import { cleanupMessages } from "./cleanup/messages";
 import { ISavedMessageData, SavedMessage } from "./entities/SavedMessage";
 import { buildEntity } from "./buildEntity";
 
-if (!isAPI()) {
-  const CLEANUP_INTERVAL = 5 * MINUTES;
-
-  async function cleanup() {
-    await cleanupMessages();
-    setTimeout(cleanup, CLEANUP_INTERVAL);
-  }
-
-  // Start first cleanup 30 seconds after startup
-  setTimeout(cleanup, 30 * SECONDS);
-}
-
 export class GuildSavedMessages extends BaseGuildRepository {
   private messages: Repository<SavedMessage>;
   protected toBePermanent: Set<string>;
diff --git a/backend/src/data/loops/savedMessageCleanupLoop.ts b/backend/src/data/loops/savedMessageCleanupLoop.ts
new file mode 100644
index 00000000..b62e520c
--- /dev/null
+++ b/backend/src/data/loops/savedMessageCleanupLoop.ts
@@ -0,0 +1,14 @@
+import { MINUTES } from "../../utils";
+import { cleanupMessages } from "../cleanup/messages";
+
+const LOOP_INTERVAL = 5 * MINUTES;
+
+export async function runSavedMessageCleanupLoop() {
+  try {
+    console.log("[SAVED MESSAGE CLEANUP LOOP] Deleting old/deleted messages from the database");
+    const deleted = await cleanupMessages();
+    console.log(`[SAVED MESSAGE CLEANUP LOOP] Deleted ${deleted} old/deleted messages from the database`);
+  } finally {
+    setTimeout(() => runSavedMessageCleanupLoop(), LOOP_INTERVAL);
+  }
+}
diff --git a/backend/src/index.ts b/backend/src/index.ts
index 142e3a07..29265ec6 100644
--- a/backend/src/index.ts
+++ b/backend/src/index.ts
@@ -29,6 +29,7 @@ import { runUpcomingScheduledPostsLoop } from "./data/loops/upcomingScheduledPos
 import { runExpiringTempbansLoop } from "./data/loops/expiringTempbansLoop";
 import { runExpiringVCAlertsLoop } from "./data/loops/expiringVCAlertsLoop";
 import { runExpiredArchiveDeletionLoop } from "./data/loops/expiredArchiveDeletionLoop";
+import { runSavedMessageCleanupLoop } from "./data/loops/savedMessageCleanupLoop";
 
 if (!process.env.KEY) {
   // tslint:disable-next-line:no-console
@@ -348,6 +349,8 @@ connect().then(async () => {
     runExpiringVCAlertsLoop();
     await sleep(10 * SECONDS);
     runExpiredArchiveDeletionLoop();
+    await sleep(10 * SECONDS);
+    runSavedMessageCleanupLoop();
   });
 
   bot.initialize();