mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 03:55:38 -04:00
Add all 10 milestones: Drizzle ORM + SQLite database with WAL mode, Better Auth email/password authentication, TMDB API integration for search and metadata import, TV season/episode caching, user tracking (watchlist/status/watches/ratings with auto-transitions), discovery feeds (continue watching, library, recommendations), US streaming availability via TMDB providers, background job scheduler with instrumentation hook, and dark cinema-themed frontend with DM Serif Display + DM Sans typography and amber accent design system. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
113 lines
2.2 KiB
TypeScript
113 lines
2.2 KiB
TypeScript
export interface TmdbSearchResult {
|
|
id: number;
|
|
media_type: "movie" | "tv" | "person";
|
|
title?: string;
|
|
name?: string;
|
|
original_title?: string;
|
|
original_name?: string;
|
|
overview: string;
|
|
release_date?: string;
|
|
first_air_date?: string;
|
|
poster_path: string | null;
|
|
backdrop_path: string | null;
|
|
popularity: number;
|
|
vote_average: number;
|
|
vote_count: number;
|
|
}
|
|
|
|
export interface TmdbSearchResponse {
|
|
page: number;
|
|
results: TmdbSearchResult[];
|
|
total_pages: number;
|
|
total_results: number;
|
|
}
|
|
|
|
export interface TmdbMovieDetails {
|
|
id: number;
|
|
title: string;
|
|
original_title: string;
|
|
overview: string;
|
|
release_date: string;
|
|
poster_path: string | null;
|
|
backdrop_path: string | null;
|
|
popularity: number;
|
|
vote_average: number;
|
|
vote_count: number;
|
|
status: string;
|
|
}
|
|
|
|
export interface TmdbTvDetails {
|
|
id: number;
|
|
name: string;
|
|
original_name: string;
|
|
overview: string;
|
|
first_air_date: string;
|
|
poster_path: string | null;
|
|
backdrop_path: string | null;
|
|
popularity: number;
|
|
vote_average: number;
|
|
vote_count: number;
|
|
status: string;
|
|
number_of_seasons: number;
|
|
seasons: TmdbSeasonSummary[];
|
|
}
|
|
|
|
export interface TmdbSeasonSummary {
|
|
id: number;
|
|
season_number: number;
|
|
name: string;
|
|
overview: string;
|
|
poster_path: string | null;
|
|
air_date: string | null;
|
|
episode_count: number;
|
|
}
|
|
|
|
export interface TmdbSeasonDetails {
|
|
id: number;
|
|
season_number: number;
|
|
name: string;
|
|
overview: string;
|
|
poster_path: string | null;
|
|
air_date: string | null;
|
|
episodes: TmdbEpisode[];
|
|
}
|
|
|
|
export interface TmdbEpisode {
|
|
id: number;
|
|
episode_number: number;
|
|
name: string;
|
|
overview: string;
|
|
still_path: string | null;
|
|
air_date: string | null;
|
|
runtime: number | null;
|
|
}
|
|
|
|
export interface TmdbWatchProviderResponse {
|
|
id: number;
|
|
results: Record<
|
|
string,
|
|
{
|
|
link?: string;
|
|
flatrate?: TmdbProvider[];
|
|
rent?: TmdbProvider[];
|
|
buy?: TmdbProvider[];
|
|
free?: TmdbProvider[];
|
|
ads?: TmdbProvider[];
|
|
}
|
|
>;
|
|
}
|
|
|
|
export interface TmdbProvider {
|
|
provider_id: number;
|
|
provider_name: string;
|
|
logo_path: string;
|
|
display_priority: number;
|
|
}
|
|
|
|
export interface TmdbRecommendationResponse {
|
|
page: number;
|
|
results: TmdbSearchResult[];
|
|
total_pages: number;
|
|
total_results: number;
|
|
}
|