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.
overseerr/server/models/Person.ts

140 lines
3.3 KiB

import type {
TmdbPersonCreditCast,
TmdbPersonCreditCrew,
TmdbPersonDetails,
} from '@server/api/themoviedb/interfaces';
import type Media from '@server/entity/Media';
export interface PersonDetails {
id: number;
name: string;
birthday: string;
deathday: string;
knownForDepartment: string;
alsoKnownAs?: string[];
gender: number;
biography: string;
popularity: number;
placeOfBirth?: string;
profilePath?: string;
adult: boolean;
imdbId?: string;
homepage?: string;
}
export interface PersonCredit {
id: number;
originalLanguage: string;
episodeCount: number;
overview: string;
originCountry: string[];
originalName: string;
voteCount: number;
name: string;
mediaType?: string;
popularity: number;
creditId: string;
backdropPath?: string;
firstAirDate: string;
voteAverage: number;
genreIds?: number[];
posterPath?: string;
originalTitle: string;
video?: boolean;
title: string;
adult: boolean;
releaseDate: string;
mediaInfo?: Media;
}
export interface PersonCreditCast extends PersonCredit {
character: string;
}
export interface PersonCreditCrew extends PersonCredit {
department: string;
job: string;
}
export interface CombinedCredit {
id: number;
cast: PersonCreditCast[];
crew: PersonCreditCrew[];
}
export const mapPersonDetails = (person: TmdbPersonDetails): PersonDetails => ({
id: person.id,
name: person.name,
birthday: person.birthday,
deathday: person.deathday,
knownForDepartment: person.known_for_department,
alsoKnownAs: person.also_known_as,
gender: person.gender,
biography: person.biography,
popularity: person.popularity,
placeOfBirth: person.place_of_birth,
profilePath: person.profile_path,
adult: person.adult,
imdbId: person.imdb_id,
homepage: person.homepage,
});
export const mapCastCredits = (
cast: TmdbPersonCreditCast,
media?: Media
): PersonCreditCast => ({
id: cast.id,
originalLanguage: cast.original_language,
episodeCount: cast.episode_count,
overview: cast.overview,
originCountry: cast.origin_country,
originalName: cast.original_name,
voteCount: cast.vote_count,
name: cast.name,
mediaType: cast.media_type,
popularity: cast.popularity,
creditId: cast.credit_id,
backdropPath: cast.backdrop_path,
firstAirDate: cast.first_air_date,
voteAverage: cast.vote_average,
genreIds: cast.genre_ids,
posterPath: cast.poster_path,
originalTitle: cast.original_title,
video: cast.video,
title: cast.title,
adult: cast.adult,
releaseDate: cast.release_date,
character: cast.character,
mediaInfo: media,
});
export const mapCrewCredits = (
crew: TmdbPersonCreditCrew,
media?: Media
): PersonCreditCrew => ({
id: crew.id,
originalLanguage: crew.original_language,
episodeCount: crew.episode_count,
overview: crew.overview,
originCountry: crew.origin_country,
originalName: crew.original_name,
voteCount: crew.vote_count,
name: crew.name,
mediaType: crew.media_type,
popularity: crew.popularity,
creditId: crew.credit_id,
backdropPath: crew.backdrop_path,
firstAirDate: crew.first_air_date,
voteAverage: crew.vote_average,
genreIds: crew.genre_ids,
posterPath: crew.poster_path,
originalTitle: crew.original_title,
video: crew.video,
title: crew.title,
adult: crew.adult,
releaseDate: crew.release_date,
department: crew.department,
job: crew.job,
mediaInfo: media,
});