Small Nest.js-based project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
test-assignment-joyn/src/services/omdbEnrichedDataService.ts

41 lines
1.2 KiB

import type {
EnrichedDataService,
InternalProvider,
MovieData,
OmdbProvider,
} from '../types';
export const createOmdbEnrichedDataService = async (
internalProvider: InternalProvider,
omdbProvider: OmdbProvider,
): Promise<EnrichedDataService> => {
const internalMetadataList = await internalProvider.getAllMetadata();
const mergedMetadataList = await Promise.all(
internalMetadataList.map(async (internalData): Promise<MovieData> => {
const omdbData = await omdbProvider.getMetadata(
internalData.imdbId,
);
if (!omdbData) {
throw new Error(
`No OMDB data found for ${internalData.imdbId}`,
);
}
return {
...omdbData,
...internalData,
ratings: [...omdbData.ratings, ...internalData.ratings],
};
}),
);
return {
getMetadataByInternalId: (requestedId) =>
mergedMetadataList.find(
({ internalId }) => internalId === requestedId,
),
getMetadataByImdbId: (requestedId) =>
mergedMetadataList.find(({ imdbId }) => imdbId === requestedId),
};
};