refactor: update script

* runs promises serially instead of running them all at once
* directly calls /new-episode route for latest episode
This commit is contained in:
2024-10-06 08:48:10 -04:00
parent 45edd284ee
commit d13bc2a64e
2 changed files with 40 additions and 38 deletions

5
src/libs/promiseQueue.ts Normal file
View File

@@ -0,0 +1,5 @@
export async function promiseQueue(queue: (() => Promise<void>)[]) {
for (const promise of queue) {
await promise();
}
}

View File

@@ -1,4 +1,5 @@
import { fetchTitleFromAnilist } from "~/libs/anilist/getTitle"; import { fetchTitleFromAnilist } from "~/libs/anilist/getTitle";
import { promiseQueue } from "~/libs/promiseQueue";
import { queueTask } from "~/libs/tasks/queueTask"; import { queueTask } from "~/libs/tasks/queueTask";
import { getDb } from "~/models/db"; import { getDb } from "~/models/db";
import { watchStatusTable } from "~/models/schema"; import { watchStatusTable } from "~/models/schema";
@@ -13,13 +14,14 @@ if (isDevMode) {
} }
await getTitleIds().then((titles) => await getTitleIds().then((titles) =>
Promise.all( promiseQueue(
titles.map((title) => titles.map(
triggerNextEpisodeRoute(title).then((success) => (title) => () =>
console.log( triggerNextEpisodeRoute(title).then((success) =>
`Triggered next episode route for title ${title}: ${success}`, console.log(
`Triggered next episode route for title ${title}: ${success}`,
),
), ),
),
), ),
), ),
); );
@@ -33,7 +35,13 @@ function getTitleIds() {
} }
async function triggerNextEpisodeRoute(titleId: number) { async function triggerNextEpisodeRoute(titleId: number) {
const title = await fetchTitleFromAnilist(titleId); let title;
try {
title = await fetchTitleFromAnilist(titleId);
} catch (error) {
console.error(`Failed to fetch title ${titleId}`, error);
return false;
}
if (!title) { if (!title) {
console.error(`Failed to fetch title ${titleId}`); console.error(`Failed to fetch title ${titleId}`);
return false; return false;
@@ -61,42 +69,31 @@ async function triggerNextEpisodeRoute(titleId: number) {
return false; return false;
} }
if (isDevMode) { return fetch(`${serverUrl}/internal/new-episode`, {
return fetch("http://127.0.0.1:8080/internal/new-episode", { method: "POST",
method: "POST", headers: {
headers: { "Content-Type": "application/json",
"Content-Type": "application/json", },
}, body: JSON.stringify({
body: JSON.stringify({
aniListId: titleId,
episodeNumber: mostRecentEpisodeNumber,
}),
})
.then((res) => res.json() as Promise<{ success: boolean }>)
.then(({ success, error }) => {
if (!success) {
console.error(
`Failed to trigger next episode route for title ${titleId} (most recent episode: ${mostRecentEpisodeNumber})`,
error,
);
}
return success;
});
} else {
return queueTask(process.env, "new-episode", {
aniListId: titleId, aniListId: titleId,
episodeNumber: mostRecentEpisodeNumber, episodeNumber: mostRecentEpisodeNumber,
}) }),
.then(() => true) })
.catch((error) => { .then(
(res) =>
res.json() as Promise<{ success: boolean; message?: string }>,
)
.then((response) => {
const { success } = response;
if (!success) {
console.error( console.error(
`Failed to trigger next episode route for title ${titleId} (most recent episode: ${mostRecentEpisodeNumber})`, `Failed to trigger next episode route for title ${titleId} (most recent episode: ${mostRecentEpisodeNumber})`,
error, response,
); );
return false; }
});
} return success;
});
}); });
if (!wasSuccessful) { if (!wasSuccessful) {