package models // MediaInfo represents media information structure used by handlers and services type MediaInfo struct { ID string `json:"id"` Title string `json:"title"` OriginalTitle string `json:"original_title,omitempty"` Overview string `json:"overview"` PosterPath string `json:"poster_path"` BackdropPath string `json:"backdrop_path"` ReleaseDate string `json:"release_date,omitempty"` FirstAirDate string `json:"first_air_date,omitempty"` VoteAverage float64 `json:"vote_average"` VoteCount int `json:"vote_count"` MediaType string `json:"media_type"` Popularity float64 `json:"popularity"` GenreIDs []int `json:"genre_ids"` } type Movie struct { ID int `json:"id"` Title string `json:"title"` OriginalTitle string `json:"original_title"` Overview string `json:"overview"` PosterPath string `json:"poster_path"` BackdropPath string `json:"backdrop_path"` ReleaseDate string `json:"release_date"` GenreIDs []int `json:"genre_ids"` Genres []Genre `json:"genres"` VoteAverage float64 `json:"vote_average"` VoteCount int `json:"vote_count"` Popularity float64 `json:"popularity"` Adult bool `json:"adult"` Video bool `json:"video"` OriginalLanguage string `json:"original_language"` Runtime int `json:"runtime,omitempty"` Budget int64 `json:"budget,omitempty"` Revenue int64 `json:"revenue,omitempty"` Status string `json:"status,omitempty"` Tagline string `json:"tagline,omitempty"` Homepage string `json:"homepage,omitempty"` IMDbID string `json:"imdb_id,omitempty"` KinopoiskID int `json:"kinopoisk_id,omitempty"` BelongsToCollection *Collection `json:"belongs_to_collection,omitempty"` ProductionCompanies []ProductionCompany `json:"production_companies,omitempty"` ProductionCountries []ProductionCountry `json:"production_countries,omitempty"` SpokenLanguages []SpokenLanguage `json:"spoken_languages,omitempty"` } type TVShow struct { ID int `json:"id"` Name string `json:"name"` OriginalName string `json:"original_name"` Overview string `json:"overview"` PosterPath string `json:"poster_path"` BackdropPath string `json:"backdrop_path"` FirstAirDate string `json:"first_air_date"` LastAirDate string `json:"last_air_date"` GenreIDs []int `json:"genre_ids"` Genres []Genre `json:"genres"` VoteAverage float64 `json:"vote_average"` VoteCount int `json:"vote_count"` Popularity float64 `json:"popularity"` OriginalLanguage string `json:"original_language"` OriginCountry []string `json:"origin_country"` NumberOfEpisodes int `json:"number_of_episodes,omitempty"` NumberOfSeasons int `json:"number_of_seasons,omitempty"` Status string `json:"status,omitempty"` Type string `json:"type,omitempty"` Homepage string `json:"homepage,omitempty"` InProduction bool `json:"in_production,omitempty"` Languages []string `json:"languages,omitempty"` Networks []Network `json:"networks,omitempty"` ProductionCompanies []ProductionCompany `json:"production_companies,omitempty"` ProductionCountries []ProductionCountry `json:"production_countries,omitempty"` SpokenLanguages []SpokenLanguage `json:"spoken_languages,omitempty"` CreatedBy []Creator `json:"created_by,omitempty"` EpisodeRunTime []int `json:"episode_run_time,omitempty"` Seasons []Season `json:"seasons,omitempty"` IMDbID string `json:"imdb_id,omitempty"` KinopoiskID int `json:"kinopoisk_id,omitempty"` } // MultiSearchResult для мультипоиска type MultiSearchResult struct { ID int `json:"id"` MediaType string `json:"media_type"` // "movie" или "tv" Title string `json:"title,omitempty"` // для фильмов Name string `json:"name,omitempty"` // для сериалов OriginalTitle string `json:"original_title,omitempty"` OriginalName string `json:"original_name,omitempty"` Overview string `json:"overview"` PosterPath string `json:"poster_path"` BackdropPath string `json:"backdrop_path"` ReleaseDate string `json:"release_date,omitempty"` // для фильмов FirstAirDate string `json:"first_air_date,omitempty"` // для сериалов GenreIDs []int `json:"genre_ids"` VoteAverage float64 `json:"vote_average"` VoteCount int `json:"vote_count"` Popularity float64 `json:"popularity"` Adult bool `json:"adult"` OriginalLanguage string `json:"original_language"` OriginCountry []string `json:"origin_country,omitempty"` } type MultiSearchResponse struct { Page int `json:"page"` Results []MultiSearchResult `json:"results"` TotalPages int `json:"total_pages"` TotalResults int `json:"total_results"` } type Genre struct { ID int `json:"id"` Name string `json:"name"` } type GenresResponse struct { Genres []Genre `json:"genres"` } type ExternalIDs struct { ID int `json:"id"` IMDbID string `json:"imdb_id"` KinopoiskID int `json:"kinopoisk_id,omitempty"` TMDBID int `json:"tmdb_id,omitempty"` TVDBID int `json:"tvdb_id,omitempty"` WikidataID string `json:"wikidata_id"` FacebookID string `json:"facebook_id"` InstagramID string `json:"instagram_id"` TwitterID string `json:"twitter_id"` } type Collection struct { ID int `json:"id"` Name string `json:"name"` PosterPath string `json:"poster_path"` BackdropPath string `json:"backdrop_path"` } type ProductionCompany struct { ID int `json:"id"` LogoPath string `json:"logo_path"` Name string `json:"name"` OriginCountry string `json:"origin_country"` } type ProductionCountry struct { ISO31661 string `json:"iso_3166_1"` Name string `json:"name"` } type SpokenLanguage struct { EnglishName string `json:"english_name"` ISO6391 string `json:"iso_639_1"` Name string `json:"name"` } type Network struct { ID int `json:"id"` LogoPath string `json:"logo_path"` Name string `json:"name"` OriginCountry string `json:"origin_country"` } type Creator struct { ID int `json:"id"` CreditID string `json:"credit_id"` Name string `json:"name"` Gender int `json:"gender"` ProfilePath string `json:"profile_path"` } type Season struct { AirDate string `json:"air_date"` EpisodeCount int `json:"episode_count"` ID int `json:"id"` Name string `json:"name"` Overview string `json:"overview"` PosterPath string `json:"poster_path"` SeasonNumber int `json:"season_number"` } type SeasonDetails struct { AirDate string `json:"air_date"` Episodes []Episode `json:"episodes"` Name string `json:"name"` Overview string `json:"overview"` ID int `json:"id"` PosterPath string `json:"poster_path"` SeasonNumber int `json:"season_number"` } type Episode struct { AirDate string `json:"air_date"` EpisodeNumber int `json:"episode_number"` ID int `json:"id"` Name string `json:"name"` Overview string `json:"overview"` ProductionCode string `json:"production_code"` Runtime int `json:"runtime"` SeasonNumber int `json:"season_number"` ShowID int `json:"show_id"` StillPath string `json:"still_path"` VoteAverage float64 `json:"vote_average"` VoteCount int `json:"vote_count"` } type TMDBResponse struct { Page int `json:"page"` Results []Movie `json:"results"` TotalPages int `json:"total_pages"` TotalResults int `json:"total_results"` } type TMDBTVResponse struct { Page int `json:"page"` Results []TVShow `json:"results"` TotalPages int `json:"total_pages"` TotalResults int `json:"total_results"` } type SearchParams struct { Query string `json:"query"` Page int `json:"page"` Language string `json:"language"` Region string `json:"region"` Year int `json:"year"` PrimaryReleaseYear int `json:"primary_release_year"` } type APIResponse struct { Success bool `json:"success"` Data interface{} `json:"data,omitempty"` Error string `json:"error,omitempty"` Message string `json:"message,omitempty"` } // Модели для торрентов type TorrentResult struct { Title string `json:"title"` Tracker string `json:"tracker"` Size string `json:"size"` Seeders int `json:"seeders"` Peers int `json:"peers"` Leechers int `json:"leechers"` Quality string `json:"quality"` Voice []string `json:"voice,omitempty"` Types []string `json:"types,omitempty"` Seasons []int `json:"seasons,omitempty"` Category string `json:"category"` MagnetLink string `json:"magnet"` TorrentLink string `json:"torrent_link,omitempty"` Details string `json:"details,omitempty"` PublishDate string `json:"publish_date"` AddedDate string `json:"added_date,omitempty"` Source string `json:"source"` } type TorrentSearchResponse struct { Query string `json:"query"` Results []TorrentResult `json:"results"` Total int `json:"total"` } // RedAPI специфичные структуры type RedAPIResponse struct { Results []RedAPITorrent `json:"Results"` } type RedAPITorrent struct { Title string `json:"Title"` Tracker string `json:"Tracker"` Size interface{} `json:"Size"` // Может быть string или number Seeders int `json:"Seeders"` Peers int `json:"Peers"` MagnetUri string `json:"MagnetUri"` PublishDate string `json:"PublishDate"` CategoryDesc string `json:"CategoryDesc"` Details string `json:"Details"` Info *RedAPITorrentInfo `json:"Info,omitempty"` } type RedAPITorrentInfo struct { Quality interface{} `json:"quality,omitempty"` // Может быть string или number Voices []string `json:"voices,omitempty"` Types []string `json:"types,omitempty"` Seasons []int `json:"seasons,omitempty"` } // Alloha API структуры для получения информации о фильмах type AllohaResponse struct { Data *AllohaData `json:"data"` } type AllohaData struct { Name string `json:"name"` OriginalName string `json:"original_name"` } // Опции поиска торрентов type TorrentSearchOptions struct { Season *int Quality []string MinQuality string MaxQuality string ExcludeQualities []string HDR *bool HEVC *bool SortBy string SortOrder string GroupByQuality bool GroupBySeason bool ContentType string } // Модели для плееров type PlayerResponse struct { Type string `json:"type"` URL string `json:"url"` Iframe string `json:"iframe,omitempty"` } // Модели для реакций type Reaction struct { ID string `json:"id" bson:"_id,omitempty"` UserID string `json:"userId" bson:"userId"` MediaID string `json:"mediaId" bson:"mediaId"` Type string `json:"type" bson:"type"` Created string `json:"created" bson:"created"` } type ReactionCounts struct { Fire int `json:"fire"` Nice int `json:"nice"` Think int `json:"think"` Bore int `json:"bore"` Shit int `json:"shit"` }