Skip to content

Commit

Permalink
feat: enrich provider mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
proohit committed Dec 13, 2022
1 parent 40e172c commit 9af6dcb
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 4 deletions.
47 changes: 44 additions & 3 deletions server/src/enrichment/anime-enricher.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,33 @@ describe('AnimeEnricherbService', () => {
it('should enrich anime', async () => {
const anime: Anime = {
...emptyAnime,
sources: [`${ProviderDomain.Anilist}/1234`],
sources: [
`${ProviderDomain.Anilist}/1234`,
`${ProviderDomain.MyAnimeList}/12345`,
],
};
const enrichedAnime = await animeEnricherService.enrichAnime(anime);
expect(enrichedAnime.description).toEqual('test');
expect(enrichedAnime.providerMapping).toEqual({
[Provider.Anilist]: '1234',
[Provider.MyAnimeList]: '12345',
});
});

it('should not enrich anime with existing providerMapping', async () => {
const anime: Anime = {
...emptyAnime,
sources: [`${ProviderDomain.Anilist}/1234`],
providerMapping: {
[Provider.Anilist]: '1234',
[Provider.AniDB]: '12345',
},
};
const enrichedAnime = await animeEnricherService.enrichAnime(anime);
expect(enrichedAnime.providerMapping).toEqual({
[Provider.Anilist]: '1234',
[Provider.AniDB]: '12345',
});
});

it('should enrich anime with anilist', async () => {
Expand Down Expand Up @@ -97,7 +120,12 @@ describe('AnimeEnricherbService', () => {
const enrichedAnime = await animeEnricherService.enrichAnime(anime, [
Provider.MyAnimeList,
]);
expect(enrichedAnime).toEqual(anime);
expect(enrichedAnime).toEqual({
...anime,
providerMapping: {
[Provider.MyAnimeList]: '1234',
},
});
expect(enrichedAnime.description).toBeUndefined();
});

Expand All @@ -121,7 +149,12 @@ describe('AnimeEnricherbService', () => {
const enrichedAnime = await animeEnricherService.enrichAnime(anime, [
Provider.AniDB,
]);
expect(enrichedAnime).toEqual(anime);
expect(enrichedAnime).toEqual({
...anime,
providerMapping: {
[Provider.AniDB]: '1234',
},
});
expect(enrichedAnime.description).toBeUndefined();
});

Expand Down Expand Up @@ -239,5 +272,13 @@ describe('AnimeEnricherbService', () => {
};
expect(animeEnricherService.needsEnrichment(anime)).toBeTruthy();
});

it('should return true if the anime has no providerMapping', () => {
const anime: Anime = {
...emptyAnime,
sources: [`${ProviderDomain.Anilist}/1234`],
};
expect(animeEnricherService.needsEnrichment(anime)).toBeTruthy();
});
});
});
22 changes: 21 additions & 1 deletion server/src/enrichment/anime-enricher.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ export class AnimeEnricherService {
): Promise<Anime> {
let enrichedAnime = { ...anime };
const providersToUse = providers || getProviders(anime);

enrichedAnime = this.getProviderMappingEnrichedAnime(enrichedAnime);

if (providersToUse.includes(Provider.Anilist)) {
enrichedAnime = await this.getAnilistEnrichedAnime(enrichedAnime);
}
Expand All @@ -56,7 +59,24 @@ export class AnimeEnricherService {
}

public needsEnrichment(anime: Anime): boolean {
return !anime.description;
return !anime.description || !anime.providerMapping;
}

private getProviderMappingEnrichedAnime(anime: Anime): Anime {
if (anime.providerMapping) {
return anime;
}

const providers = getProviders(anime);

anime.providerMapping = providers.reduce((acc, provider) => {
const providerId = getProviderIdOfAnime(anime, provider);
return {
...acc,
[provider]: providerId,
};
}, {});
return anime;
}

private async getAnidbEnrichedAnime(anime: Anime): Promise<Anime> {
Expand Down
3 changes: 3 additions & 0 deletions shared/interfaces/AnimeDb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ export interface Anime {
tags: string[];
description?: string;
provider?: Provider;
providerMapping?: {
[key in Provider]?: string;
};
}

export interface AnimeSeason {
Expand Down

0 comments on commit 9af6dcb

Please sign in to comment.