refactor: Returns `null` instead of throwing

Signed-off-by: Tim Hårek Andreassen <tim@harek.no>
This commit is contained in:
Tim Hårek Andreassen 2024-04-06 23:56:35 +02:00
parent 93d11a56b1
commit 23ce666847
No known key found for this signature in database
GPG Key ID: E59C7734F0E10EB5
2 changed files with 16 additions and 8 deletions

View File

@ -8,6 +8,8 @@ type ArrayElement<A> = A extends readonly (infer T)[] ? T : never;
type PodcastEpisodes = catalogComponents["schemas"]["EpisodesHalResource"]; type PodcastEpisodes = catalogComponents["schemas"]["EpisodesHalResource"];
type Podcast = catalogComponents["schemas"]["SeriesHalResource"]; type Podcast = catalogComponents["schemas"]["SeriesHalResource"];
type PodcastEpisodesSingle = catalogComponents["schemas"]["EpisodeHalResource"]; type PodcastEpisodesSingle = catalogComponents["schemas"]["EpisodeHalResource"];
type RadioSeriesEpisode = catalogComponents["schemas"]["EpisodesHalResource"];
type RadioSeries = catalogComponents["schemas"]["SeriesHalResource"];
export type Serie = catalogComponents["schemas"]["SeriesViewModel"]; export type Serie = catalogComponents["schemas"]["SeriesViewModel"];
export type OriginalEpisode = PodcastEpisodesSingle & { url: string }; export type OriginalEpisode = PodcastEpisodesSingle & { url: string };
@ -61,7 +63,9 @@ export const nrkRadio = {
console.error(`Something went wrong with ${query} - got status ${status}`); console.error(`Something went wrong with ${query} - got status ${status}`);
return null; return null;
}, },
getSerieData: async (seriesId: string) => { getSerieData: async (
seriesId: string,
): Promise<{ episodes: OriginalEpisode[] } & (RadioSeries["series"] | Podcast["series"]) | null> => {
let [ let [
{ status: episodeStatus, body: episodeResponse }, { status: episodeStatus, body: episodeResponse },
{ status: seriesStatus, body: serieResponse }, { status: seriesStatus, body: serieResponse },
@ -79,10 +83,10 @@ export const nrkRadio = {
{ status: episodeStatus, body: episodeResponse }, { status: episodeStatus, body: episodeResponse },
{ status: seriesStatus, body: serieResponse }, { status: seriesStatus, body: serieResponse },
] = await Promise.all([ ] = await Promise.all([
get<catalogComponents["schemas"]["EpisodesHalResource"]>( get<RadioSeriesEpisode>(
`https://psapi.nrk.no/radio/catalog/series/${seriesId}/episodes`, `https://psapi.nrk.no/radio/catalog/series/${seriesId}/episodes`,
), ),
get<catalogComponents["schemas"]["SeriesHalResource"]>( get<RadioSeries>(
`https://psapi.nrk.no/radio/catalog/series/${seriesId}`, `https://psapi.nrk.no/radio/catalog/series/${seriesId}`,
), ),
]); ]);
@ -100,7 +104,10 @@ export const nrkRadio = {
episodes, episodes,
}; };
} }
throw `Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`; console.error(
`Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`,
);
return null;
}, },
getEpisode: async (seriesId: string, episodeId: string): Promise<PodcastEpisode | null> => { getEpisode: async (seriesId: string, episodeId: string): Promise<PodcastEpisode | null> => {
const url = `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`; const url = `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`;

View File

@ -19,13 +19,14 @@ Deno.test("Verify empty search query yields `null`", async () => {
Deno.test("Verify getting series data for 'trygdekontoret' works", async () => { Deno.test("Verify getting series data for 'trygdekontoret' works", async () => {
const result = await nrkRadio.getSerieData("trygdekontoret"); const result = await nrkRadio.getSerieData("trygdekontoret");
assertExists(result);
assertGreaterOrEqual(result.episodes.length, 1); assertGreaterOrEqual(result.episodes.length, 1);
}); });
// TODO: This doesn't work because there is no try-catch system, it seems. Deno.test("Verify getting series data for 'trygd' does not works", async () => {
// Deno.test("Verify getting series data for 'trygd' does not works", async () => { const result = await nrkRadio.getSerieData("trygd");
// await assertThrows(async () => await nrkRadio.getSerieData("trygd")); assertEquals(result, null);
// }); });
Deno.test("Verify getting episodeId 'l_0bc5e55a-46b5-48a5-85e5-5a46b5d8a562' for 'trygdekontoret' works", async () => { Deno.test("Verify getting episodeId 'l_0bc5e55a-46b5-48a5-85e5-5a46b5d8a562' for 'trygdekontoret' works", async () => {
const result = await nrkRadio.getEpisode("trygdekontoret", "l_0bc5e55a-46b5-48a5-85e5-5a46b5d8a562"); const result = await nrkRadio.getEpisode("trygdekontoret", "l_0bc5e55a-46b5-48a5-85e5-5a46b5d8a562");