24
resources/client/titles/models/episode.ts
Executable file
24
resources/client/titles/models/episode.ts
Executable file
@@ -0,0 +1,24 @@
|
||||
import {Video} from './video';
|
||||
import {Title} from '@app/titles/models/title';
|
||||
|
||||
export const EPISODE_MODEL = 'episode';
|
||||
|
||||
export interface Episode {
|
||||
id: number;
|
||||
name: string;
|
||||
model_type: typeof EPISODE_MODEL;
|
||||
status: 'released' | 'upcoming';
|
||||
poster: string;
|
||||
runtime: number;
|
||||
popularity: number;
|
||||
rating: number;
|
||||
description: string;
|
||||
season_number: number;
|
||||
episode_number: number;
|
||||
title?: Title;
|
||||
title_id: number;
|
||||
release_date: string;
|
||||
year: number;
|
||||
videos?: Video[];
|
||||
primary_video: Video;
|
||||
}
|
||||
10
resources/client/titles/models/genre.ts
Executable file
10
resources/client/titles/models/genre.ts
Executable file
@@ -0,0 +1,10 @@
|
||||
export const GENRE_MODEL = 'genre';
|
||||
|
||||
export interface Genre {
|
||||
id: number;
|
||||
name: string;
|
||||
display_name: string;
|
||||
updated_at: string;
|
||||
created_at: string;
|
||||
model_type: typeof GENRE_MODEL;
|
||||
}
|
||||
10
resources/client/titles/models/keyword.ts
Executable file
10
resources/client/titles/models/keyword.ts
Executable file
@@ -0,0 +1,10 @@
|
||||
export const KEYWORD_MODEL = 'keyword';
|
||||
|
||||
export interface Keyword {
|
||||
id: number;
|
||||
name: string;
|
||||
display_name: string;
|
||||
updated_at: string;
|
||||
created_at: string;
|
||||
model_type: typeof KEYWORD_MODEL;
|
||||
}
|
||||
15
resources/client/titles/models/news-article.ts
Executable file
15
resources/client/titles/models/news-article.ts
Executable file
@@ -0,0 +1,15 @@
|
||||
export const NEWS_ARTICLE_MODEL = 'newsArticle';
|
||||
|
||||
export interface NewsArticle {
|
||||
id: number;
|
||||
title?: string;
|
||||
body: string;
|
||||
slug: string;
|
||||
image: string;
|
||||
byline?: string;
|
||||
source?: string;
|
||||
source_url?: string;
|
||||
model_type: typeof NEWS_ARTICLE_MODEL;
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
20
resources/client/titles/models/person.ts
Executable file
20
resources/client/titles/models/person.ts
Executable file
@@ -0,0 +1,20 @@
|
||||
import {PersonCredit} from './title';
|
||||
|
||||
export const PERSON_MODEL = 'person';
|
||||
|
||||
export interface Person {
|
||||
id: number;
|
||||
name: string;
|
||||
poster?: string;
|
||||
known_for?: string;
|
||||
gender?: string;
|
||||
birth_date: string;
|
||||
death_date: string;
|
||||
birth_place: string;
|
||||
primary_credit?: PersonCredit;
|
||||
views?: number;
|
||||
popularity?: number;
|
||||
updated_at?: string;
|
||||
description: string;
|
||||
model_type: typeof PERSON_MODEL;
|
||||
}
|
||||
10
resources/client/titles/models/production-country.ts
Executable file
10
resources/client/titles/models/production-country.ts
Executable file
@@ -0,0 +1,10 @@
|
||||
export const PRODUCTION_COUNTRY_MODEL = 'production_country';
|
||||
|
||||
export interface ProductionCountry {
|
||||
id: number;
|
||||
name: string;
|
||||
display_name: string;
|
||||
updated_at: string;
|
||||
created_at: string;
|
||||
model_type: typeof PRODUCTION_COUNTRY_MODEL;
|
||||
}
|
||||
22
resources/client/titles/models/review.ts
Executable file
22
resources/client/titles/models/review.ts
Executable file
@@ -0,0 +1,22 @@
|
||||
import {User} from '@common/auth/user';
|
||||
import {NormalizedModel} from '@common/datatable/filters/normalized-model';
|
||||
|
||||
export interface Review {
|
||||
id: number;
|
||||
score: number;
|
||||
reviewable_id: number;
|
||||
reviewable_type: string;
|
||||
user_id: number;
|
||||
user?: User;
|
||||
current_user_feedback?: boolean;
|
||||
current_user_reported?: boolean;
|
||||
helpful_count: number;
|
||||
not_helpful_count: number;
|
||||
reviewable: NormalizedModel;
|
||||
title?: string;
|
||||
body?: string;
|
||||
reports_count?: number;
|
||||
model_type: string;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
17
resources/client/titles/models/season.ts
Executable file
17
resources/client/titles/models/season.ts
Executable file
@@ -0,0 +1,17 @@
|
||||
import {PersonCredit, Title} from './title';
|
||||
import {Video} from '@app/titles/models/video';
|
||||
|
||||
export const SEASON_MODEL = 'season';
|
||||
|
||||
export interface Season {
|
||||
id: number;
|
||||
model_type: typeof SEASON_MODEL;
|
||||
poster: string;
|
||||
number: number;
|
||||
title?: Title;
|
||||
title_id: number;
|
||||
release_date: string;
|
||||
credits: PersonCredit[];
|
||||
episodes_count: number;
|
||||
primary_video?: Video;
|
||||
}
|
||||
6
resources/client/titles/models/title-image.ts
Executable file
6
resources/client/titles/models/title-image.ts
Executable file
@@ -0,0 +1,6 @@
|
||||
export interface TitleImage {
|
||||
id: number;
|
||||
url: string;
|
||||
type: 'backdrop' | 'poster';
|
||||
source: 'local' | 'tmdb';
|
||||
}
|
||||
70
resources/client/titles/models/title.ts
Executable file
70
resources/client/titles/models/title.ts
Executable file
@@ -0,0 +1,70 @@
|
||||
import {Video} from './video';
|
||||
import {TitleImage} from './title-image';
|
||||
import {Episode} from './episode';
|
||||
import {Season} from './season';
|
||||
import {Review} from './review';
|
||||
import {Genre} from '@app/titles/models/genre';
|
||||
import {Keyword} from '@app/titles/models/keyword';
|
||||
import {ProductionCountry} from '@app/titles/models/production-country';
|
||||
import {Person} from '@app/titles/models/person';
|
||||
|
||||
export interface EpisodeCredit extends Episode {
|
||||
pivot: TitleCreditPivot;
|
||||
}
|
||||
|
||||
export interface TitleCredit extends Person {
|
||||
pivot: TitleCreditPivot;
|
||||
}
|
||||
|
||||
export interface PersonCredit extends Title {
|
||||
credited_episode_count?: number;
|
||||
episodes: EpisodeCredit[];
|
||||
pivot: TitleCreditPivot;
|
||||
}
|
||||
|
||||
export interface TitleCreditPivot {
|
||||
id: number;
|
||||
job: string;
|
||||
department: 'directing' | 'writing' | 'actors' | 'creators';
|
||||
character: string;
|
||||
}
|
||||
|
||||
export const TITLE_MODEL = 'title';
|
||||
export const MOVIE_MODEL = 'movie';
|
||||
export const SERIES_MODEL = 'series';
|
||||
|
||||
export interface Title {
|
||||
id: number;
|
||||
name: string;
|
||||
original_title: string;
|
||||
model_type: typeof TITLE_MODEL;
|
||||
is_series: boolean;
|
||||
status: 'released' | 'upcoming' | 'ongoing' | 'ended';
|
||||
description: string;
|
||||
tagline: string;
|
||||
runtime: number;
|
||||
rating: number;
|
||||
budget: number;
|
||||
poster?: string;
|
||||
backdrop: string;
|
||||
revenue: number;
|
||||
views: number;
|
||||
popularity: number;
|
||||
seasons_count: number;
|
||||
release_date: string;
|
||||
year: number;
|
||||
genres: Genre[];
|
||||
keywords: Keyword[];
|
||||
production_countries: ProductionCountry[];
|
||||
videos: Video[];
|
||||
all_videos?: Video[];
|
||||
primary_video: Video;
|
||||
primary_video_count?: number;
|
||||
certification?: string;
|
||||
images: TitleImage[];
|
||||
season?: Season;
|
||||
seasons?: Season[];
|
||||
reviews?: Review[];
|
||||
language: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
42
resources/client/titles/models/video.ts
Executable file
42
resources/client/titles/models/video.ts
Executable file
@@ -0,0 +1,42 @@
|
||||
import {Title} from './title';
|
||||
import {VotableModel} from '@common/votes/votable-model';
|
||||
import {Episode} from '@app/titles/models/episode';
|
||||
|
||||
export const VIDEO_MODEL_TYPE = 'video';
|
||||
|
||||
export interface Video extends VotableModel {
|
||||
name: string;
|
||||
description?: string;
|
||||
src: string;
|
||||
type: 'video' | 'stream' | 'embed' | 'external';
|
||||
category: 'full' | 'trailer' | 'clip' | 'featurette' | 'teaser';
|
||||
thumbnail?: string;
|
||||
origin: 'local' | 'tmdb';
|
||||
quality: string;
|
||||
approved: boolean;
|
||||
title?: Title;
|
||||
episode?: Episode;
|
||||
user_id: number;
|
||||
season_num: number;
|
||||
episode_num: number;
|
||||
title_id: number;
|
||||
captions?: VideoCaption[];
|
||||
language?: string;
|
||||
updated_at?: string;
|
||||
created_at?: string;
|
||||
plays_count?: number;
|
||||
reports_count?: number;
|
||||
current_user_reported?: boolean;
|
||||
latest_play?: {
|
||||
time_watched?: number;
|
||||
};
|
||||
model_type: typeof VIDEO_MODEL_TYPE;
|
||||
}
|
||||
|
||||
export interface VideoCaption {
|
||||
id: number;
|
||||
name: string;
|
||||
language: string;
|
||||
order: number;
|
||||
url: string;
|
||||
}
|
||||
Reference in New Issue
Block a user