From 1ce79ed17ae79a4067627c3f3f020b128145a79f Mon Sep 17 00:00:00 2001 From: Rushil Perera Date: Thu, 19 Sep 2024 15:31:14 -0400 Subject: [PATCH] feat: delete message id when title no longer airing --- src/controllers/watch-status/index.ts | 13 ++---------- src/libs/deleteMessageIdForTitle.ts | 24 ++++++++++++++++++++++ src/libs/maybeScheduleNextAiringEpisode.ts | 2 ++ src/libs/test/getTestEnv.ts | 6 ++++++ 4 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 src/libs/deleteMessageIdForTitle.ts diff --git a/src/controllers/watch-status/index.ts b/src/controllers/watch-status/index.ts index 7a3acaa..acd9726 100644 --- a/src/controllers/watch-status/index.ts +++ b/src/controllers/watch-status/index.ts @@ -2,6 +2,7 @@ import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi"; import { Client } from "@upstash/qstash"; import { env } from "hono/adapter"; +import { deleteMessageIdForTitle } from "~/libs/deleteMessageIdForTitle"; import { maybeScheduleNextAiringEpisode } from "~/libs/maybeScheduleNextAiringEpisode"; import { verifyQstashHeader } from "~/libs/qstash/verifyQstashHeader"; import { readEnvVariable } from "~/libs/readEnvVariable"; @@ -95,20 +96,10 @@ app.openapi(route, async (c) => { titleId, ); } else if (wasDeleted) { - const messageId = await getTitleMessage( + await deleteMessageIdForTitle( env(c, "workerd"), titleId, ); - if (messageId) { - try { - await client.messages.delete(messageId); - } catch (error) { - if (!error.message.contains("not found")) { - throw error; - } - } - await deleteTitleMessage(env(c, "workerd"), titleId); - } } } catch (error) { console.error(new Error("Error setting watch status", { cause: error })); diff --git a/src/libs/deleteMessageIdForTitle.ts b/src/libs/deleteMessageIdForTitle.ts new file mode 100644 index 0000000..f11221a --- /dev/null +++ b/src/libs/deleteMessageIdForTitle.ts @@ -0,0 +1,24 @@ +import { Client } from "@upstash/qstash"; + +import { deleteTitleMessage, getTitleMessage } from "~/models/titleMessages"; +import type { Env } from "~/types/env"; + +import { readEnvVariable } from "./readEnvVariable"; + +export async function deleteMessageIdForTitle(env: Env, titleId: number) { + const messageId = await getTitleMessage(env, titleId); + if (!messageId) { + return; + } + + try { + const client = new Client({ token: readEnvVariable(env, "QSTASH_TOKEN") }); + await client.messages.delete(messageId); + } catch (error) { + if (!error.message.includes("not found")) { + throw error; + } + } + + await deleteTitleMessage(env, titleId); +} diff --git a/src/libs/maybeScheduleNextAiringEpisode.ts b/src/libs/maybeScheduleNextAiringEpisode.ts index 4297cc2..ed9657c 100644 --- a/src/libs/maybeScheduleNextAiringEpisode.ts +++ b/src/libs/maybeScheduleNextAiringEpisode.ts @@ -5,6 +5,7 @@ import { setTitleMessage } from "~/models/titleMessages"; import type { Env } from "~/types/env"; import { getNextEpisodeTimeUntilAiring } from "./anilist/getNextEpisodeAiringAt"; +import { deleteMessageIdForTitle } from "./deleteMessageIdForTitle"; import { getCurrentDomain } from "./getCurrentDomain"; export async function maybeScheduleNextAiringEpisode( @@ -14,6 +15,7 @@ export async function maybeScheduleNextAiringEpisode( ) { const nextAiring = await getNextEpisodeTimeUntilAiring(aniListId); if (!nextAiring) { + await deleteMessageIdForTitle(env, aniListId); return; } diff --git a/src/libs/test/getTestEnv.ts b/src/libs/test/getTestEnv.ts index 3a5529a..c6d5bd2 100644 --- a/src/libs/test/getTestEnv.ts +++ b/src/libs/test/getTestEnv.ts @@ -8,14 +8,20 @@ export function getTestEnvVariables(): Omit { export function getTestEnv({ ADMIN_SDK_JSON = '{"clientEmail": "test@test.com"}', ENABLE_ANIFY = "true", + QSTASH_CURRENT_SIGNING_KEY = "123", + QSTASH_NEXT_SIGNING_KEY = "123", QSTASH_URL = "https://qstash.com", + QSTASH_TOKEN = "123", TURSO_AUTH_TOKEN = "123", TURSO_URL = "http://127.0.0.1:3001", }: Partial = {}): Env { return { ADMIN_SDK_JSON, ENABLE_ANIFY, + QSTASH_CURRENT_SIGNING_KEY, + QSTASH_NEXT_SIGNING_KEY, QSTASH_URL, + QSTASH_TOKEN, TURSO_AUTH_TOKEN, TURSO_URL, };