fix: update "new episode" route to check all providers before throwing error

This commit is contained in:
2024-09-23 17:18:03 -04:00
parent d8a01fefa2
commit 87b938bdaa
2 changed files with 58 additions and 24 deletions

View File

@@ -5,7 +5,10 @@ import { env } from "hono/adapter";
import mapKeys from "lodash.mapkeys";
import { z } from "zod";
import { fetchEpisodes } from "~/controllers/episodes/getByAniListId";
import {
fetchEpisodes,
fetchEpisodesFromAllProviders,
} from "~/controllers/episodes/getByAniListId";
import { fetchEpisodeUrl } from "~/controllers/episodes/getEpisodeUrl";
import { Case, changeStringCase } from "~/libs/changeStringCase";
import type { AdminSdkCredentials } from "~/libs/fcm/getGoogleAuthToken";
@@ -59,11 +62,11 @@ app.post(
env<Env, typeof c>(c, "workerd"),
"ENABLE_ANIFY",
);
const {
errorOccurred: fetchEpisodesErrorOccurred,
result: fetchEpisodesResult,
} = await fetchEpisodes(aniListId, isAnifyEnabled);
if (fetchEpisodesErrorOccurred) {
const fetchEpisodesResult = await fetchEpisodesFromAllProviders(
aniListId,
isAnifyEnabled,
);
if (fetchEpisodesResult.length === 0) {
console.error(`Failed to fetch episodes for title ${aniListId}`);
return c.json(
{ success: false, message: "Failed to fetch episodes" },
@@ -71,31 +74,45 @@ app.post(
);
}
const { episodes, providerId } = fetchEpisodesResult;
const episode = episodes.find(
(episode) => episode.number === episodeNumber,
);
if (!episode) {
return c.json({ success: false, message: "Episode not found" }, 404);
}
let episodes;
let fetchUrlResult;
try {
fetchUrlResult = await fetchEpisodeUrl(
for (const {
episodes: episodesResult,
providerId,
} of fetchEpisodesResult) {
const episode = episodesResult.find(
(episode) => episode.number === episodeNumber,
);
if (!episode) {
continue;
}
episodes = episodesResult;
const urlResult = await fetchEpisodeUrl(
providerId,
episode.id,
aniListId,
isAnifyEnabled,
);
if (!fetchUrlResult) {
console.error(`Failed to fetch episode URL for episode ${episode.id}`);
return c.json(
{ success: false, message: "Episode URL not found" },
404,
);
continue;
}
} catch (error) {
console.error(`Failed to fetch episode URL for episode ${episode.id}`);
fetchUrlResult = urlResult;
break;
}
if (!episodes) {
console.error(`Failed to fetch episodes for title ${aniListId}`);
return c.json(
{ success: false, message: "Failed to fetch episodes" },
500,
);
}
if (!fetchUrlResult) {
console.error(`Failed to fetch episode URL for episode`);
return c.json(
{ success: false, message: "Failed to fetch episode URL" },
500,