refactor: Split up functions

Signed-off-by: Tim Hårek Andreassen <tim@harek.no>
This commit is contained in:
Tim Hårek Andreassen 2024-04-07 22:45:43 +02:00
parent 0434448d45
commit f48a4145b4
No known key found for this signature in database
GPG Key ID: E59C7734F0E10EB5
1 changed files with 22 additions and 10 deletions

View File

@ -20,17 +20,17 @@ export type SearchResult = ArrayElement<NrkSearchResultList> & {
}; };
export type SeriesData = { episodes: NrkOriginalEpisode[] } & (RadioSeries["series"] | Podcast["series"]); export type SeriesData = { episodes: NrkOriginalEpisode[] } & (RadioSeries["series"] | Podcast["series"]);
function parseSeries(nrkSeries: SeriesData): Series { function parseSeries(nrkSeriesData: SeriesData): Series {
const imageUrl = nrkSeries.squareImage?.at(-1)?.url ?? ""; const imageUrl = nrkSeriesData.squareImage?.at(-1)?.url ?? "";
return { return {
id: nrkSeries.id, id: nrkSeriesData.id,
title: nrkSeries.titles.title, title: nrkSeriesData.titles.title,
subtitle: nrkSeries.titles.subtitle ?? null, subtitle: nrkSeriesData.titles.subtitle ?? null,
link: `https://radio.nrk.no/podkast/${nrkSeries.id}`, link: `https://radio.nrk.no/podkast/${nrkSeriesData.id}`,
imageUrl: imageUrl, imageUrl: imageUrl,
lastFetchedAt: new Date(), lastFetchedAt: new Date(),
episodes: nrkSeries.episodes.map((episode) => { episodes: nrkSeriesData.episodes.map((episode) => {
return { return {
id: episode.id, id: episode.id,
title: episode.titles.title, title: episode.titles.title,
@ -62,7 +62,7 @@ async function search(query: string): Promise<NrkSearchResultList | null> {
return null; return null;
} }
async function getSeries(seriesId: string): Promise<Series | null> { async function getSeriesData(seriesId: string): Promise<SeriesData | null> {
let [ let [
{ status: episodeStatus, body: episodeResponse }, { status: episodeStatus, body: episodeResponse },
{ status: seriesStatus, body: serieResponse }, { status: seriesStatus, body: serieResponse },
@ -100,8 +100,7 @@ async function getSeries(seriesId: string): Promise<Series | null> {
...serieResponse.series, ...serieResponse.series,
episodes, episodes,
}; };
const parsedSeries = parseSeries(seriesData); return seriesData;
return parsedSeries;
} }
console.error( console.error(
`Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`, `Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`,
@ -109,6 +108,15 @@ async function getSeries(seriesId: string): Promise<Series | null> {
return null; return null;
} }
async function getSeries(seriesId: string): Promise<Series | null> {
const seriesData = await getSeriesData(seriesId);
if (!seriesData) {
return null;
}
const parsedSeries = parseSeries(seriesData);
return parsedSeries;
}
async function getEpisode(seriesId: string, episodeId: string): Promise<NrkPodcastEpisode | null> { async function getEpisode(seriesId: string, episodeId: string): Promise<NrkPodcastEpisode | null> {
const url = `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`; const url = `${nrkAPI}/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`;
const { status, body: episode } = await get<NrkPodcastEpisode>(url); const { status, body: episode } = await get<NrkPodcastEpisode>(url);
@ -151,3 +159,7 @@ export const nrkRadio = {
getEpisode, getEpisode,
parseSeries, parseSeries,
}; };
export const forTestingOnly = {
getSeriesData,
};