import type { TmdbCreditCast, TmdbAggregateCreditCast, TmdbCreditCrew, TmdbExternalIds, TmdbVideo, TmdbVideoResult, } from '../api/themoviedb/interfaces'; import { Video } from '../models/Movie'; export interface ProductionCompany { id: number; logoPath?: string; originCountry: string; name: string; description?: string; headquarters?: string; homepage?: string; } export interface TvNetwork { id: number; logoPath?: string; originCountry?: string; name: string; headquarters?: string; homepage?: string; } export interface Keyword { id: number; name: string; } export interface Genre { id: number; name: string; } export interface Cast { id: number; castId: number; character: string; creditId: string; gender?: number; name: string; order: number; profilePath?: string; } export interface Crew { id: number; creditId: string; department: string; gender?: number; job: string; name: string; profilePath?: string; } export interface ExternalIds { imdbId?: string; freebaseMid?: string; freebaseId?: string; tvdbId?: number; tvrageId?: string; facebookId?: string; instagramId?: string; twitterId?: string; } export const mapCast = (person: TmdbCreditCast): Cast => ({ castId: person.cast_id, character: person.character, creditId: person.credit_id, id: person.id, name: person.name, order: person.order, gender: person.gender, profilePath: person.profile_path, }); export const mapAggregateCast = (person: TmdbAggregateCreditCast): Cast => ({ castId: person.cast_id, // the first role is the one for which the actor appears the most as character: person.roles[0].character, creditId: person.roles[0].credit_id, id: person.id, name: person.name, order: person.order, gender: person.gender, profilePath: person.profile_path, }); export const mapCrew = (person: TmdbCreditCrew): Crew => ({ creditId: person.credit_id, department: person.department, id: person.id, job: person.job, name: person.name, gender: person.gender, profilePath: person.profile_path, }); export const mapExternalIds = (eids: TmdbExternalIds): ExternalIds => ({ facebookId: eids.facebook_id, freebaseId: eids.freebase_id, freebaseMid: eids.freebase_mid, imdbId: eids.imdb_id, instagramId: eids.instagram_id, tvdbId: eids.tvdb_id, tvrageId: eids.tvrage_id, twitterId: eids.twitter_id, }); export const mapVideos = (videoResult: TmdbVideoResult): Video[] => videoResult?.results.map(({ key, name, size, type, site }: TmdbVideo) => ({ site, key, name, size, type, url: siteUrlCreator(site, key), })); const siteUrlCreator = (site: Video['site'], key: string): string => ({ YouTube: `https://www.youtube.com/watch?v=${key}/`, }[site]);