first commit
Some checks failed
Build / run (push) Has been cancelled

This commit is contained in:
maher
2025-10-29 11:42:25 +01:00
commit 703f50a09d
4595 changed files with 385164 additions and 0 deletions

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View File

@@ -0,0 +1,6 @@
export interface TitleImage {
id: number;
url: string;
type: 'backdrop' | 'poster';
source: 'local' | 'tmdb';
}

View 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;
}

View 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;
}