diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index b89f251f..8e4ac262 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -57,245 +57,8 @@ namespace Kyoo.Controllers Task GetGenre(Expression> where); Task GetStudio(Expression> where); Task GetPerson(Expression> where); - - // Get by relations - Task> GetSeasonsFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetSeasonsFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetSeasonsFromShow(showID, where, new Sort(sort), limit); - Task> GetSeasonsFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetSeasonsFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetSeasonsFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetEpisodesFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetEpisodesFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetEpisodesFromShow(showID, where, new Sort(sort), limit); - - Task> GetEpisodesFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetEpisodesFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetEpisodesFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetEpisodesFromSeason(int seasonID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetEpisodesFromSeason(int seasonID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetEpisodesFromSeason(seasonID, where, new Sort(sort), limit); - - Task> GetEpisodesFromSeason(int showID, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetEpisodesFromSeason(int showID, - int seasonNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetEpisodesFromSeason(showID, seasonNumber, where, new Sort(sort), limit); - - Task> GetEpisodesFromSeason(string showSlug, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetEpisodesFromSeason(string showSlug, - int seasonNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetEpisodesFromSeason(showSlug, seasonNumber, where, new Sort(sort), limit); - - Task> GetPeopleFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetPeopleFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetPeopleFromShow(showID, where, new Sort(sort), limit); - - Task> GetPeopleFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetPeopleFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetPeopleFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetGenresFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetGenresFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetGenresFromShow(showID, where, new Sort(sort), limit); - - Task> GetGenresFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetGenresFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetGenresFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetTracksFromEpisode(int episodeID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetTracksFromEpisode(int episodeID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetTracksFromEpisode(episodeID, where, new Sort(sort), limit); - - Task> GetTracksFromEpisode(int showID, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetTracksFromEpisode(int showID, - int seasonNumber, - int episodeNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetTracksFromEpisode(showID, seasonNumber, episodeNumber, where, new Sort(sort), limit); - - Task> GetTracksFromEpisode(string showSlug, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetTracksFromEpisode(string showSlug, - int seasonNumber, - int episodeNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetTracksFromEpisode(showSlug, seasonNumber, episodeNumber, where, new Sort(sort), limit); - - Task GetStudioFromShow(int showID); - Task GetStudioFromShow(string showSlug); - Task GetShowFromSeason(int seasonID); - Task GetShowFromEpisode(int episodeID); - Task GetSeasonFromEpisode(int episodeID); - - Task> GetLibrariesFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetLibrariesFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetLibrariesFromShow(showID, where, new Sort(sort), limit); - - Task> GetLibrariesFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetLibrariesFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetLibrariesFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetCollectionsFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetCollectionsFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetCollectionsFromShow(showID, where, new Sort(sort), limit); - - Task> GetCollectionsFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetCollectionsFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetCollectionsFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetShowsFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetShowsFromLibrary(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetShowsFromLibrary(id, where, new Sort(sort), limit); - - Task> GetShowsFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetShowsFromLibrary(string slug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetShowsFromLibrary(slug, where, new Sort(sort), limit); - - Task> GetCollectionsFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetCollectionsFromLibrary(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetCollectionsFromLibrary(id, where, new Sort(sort), limit); - - Task> GetCollectionsFromLibrary(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetCollectionsFromLibrary(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetCollectionsFromLibrary(showSlug, where, new Sort(sort), limit); + // Library Items relations Task> GetItemsFromLibrary(int id, Expression> where = null, Sort sort = default, @@ -316,46 +79,28 @@ namespace Kyoo.Controllers Pagination limit = default ) => GetItemsFromLibrary(librarySlug, where, new Sort(sort), limit); - Task> GetShowsFromCollection(int id, - Expression> where = null, - Sort sort = default, + // People Role relations + Task> GetPeopleFromShow(int showID, + Expression> where = null, + Sort sort = default, Pagination limit = default); - Task> GetShowsFromCollection(int id, - [Optional] Expression> where, - Expression> sort, + Task> GetPeopleFromShow(int showID, + [Optional] Expression> where, + Expression> sort, Pagination limit = default - ) => GetShowsFromCollection(id, where, new Sort(sort), limit); + ) => GetPeopleFromShow(showID, where, new Sort(sort), limit); - Task> GetShowsFromCollection(string slug, - Expression> where = null, - Sort sort = default, + Task> GetPeopleFromShow(string showSlug, + Expression> where = null, + Sort sort = default, Pagination limit = default); - Task> GetShowsFromCollection(string slug, - [Optional] Expression> where, - Expression> sort, + Task> GetPeopleFromShow(string showSlug, + [Optional] Expression> where, + Expression> sort, Pagination limit = default - ) => GetShowsFromCollection(slug, where, new Sort(sort), limit); - - Task> GetLibrariesFromCollection(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetLibrariesFromCollection(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetLibrariesFromCollection(id, where, new Sort(sort), limit); - - Task> GetLibrariesFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetLibrariesFromCollection(string slug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetLibrariesFromCollection(slug, where, new Sort(sort), limit); + ) => GetPeopleFromShow(showSlug, where, new Sort(sort), limit); + // Show Role relations Task> GetRolesFromPeople(int showID, Expression> where = null, Sort sort = default, @@ -376,7 +121,6 @@ namespace Kyoo.Controllers Pagination limit = default ) => GetRolesFromPeople(showSlug, where, new Sort(sort), limit); - // Helpers Task AddShowLink(int showID, int? libraryID, int? collectionID); Task AddShowLink([NotNull] Show show, Library library, Collection collection); @@ -391,10 +135,10 @@ namespace Kyoo.Controllers Task> GetShows(Expression> where = null, Sort sort = default, Pagination limit = default); - Task> GetSeasonsFromShow(Expression> where = null, + Task> GetSeasons(Expression> where = null, Sort sort = default, Pagination limit = default); - Task> GetEpisodesFromShow(Expression> where = null, + Task> GetEpisodes(Expression> where = null, Sort sort = default, Pagination limit = default); Task> GetTracks(Expression> where = null, @@ -425,14 +169,6 @@ namespace Kyoo.Controllers Expression> sort, Pagination limit = default ) => GetShows(where, new Sort(sort), limit); - Task> GetSeasonsFromShow([Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetSeasonsFromShow(where, new Sort(sort), limit); - Task> GetEpisodesFromShow([Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetEpisodesFromShow(where, new Sort(sort), limit); Task> GetTracks([Optional] Expression> where, Expression> sort, Pagination limit = default @@ -455,7 +191,7 @@ namespace Kyoo.Controllers ) => GetProviders(where, new Sort(sort), limit); - // Search + // Search Task> SearchLibraries(string searchQuery); Task> SearchCollections(string searchQuery); Task> SearchShows(string searchQuery); diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index 47419e88..e3ae3f65 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -110,49 +110,6 @@ namespace Kyoo.Controllers public interface IShowRepository : IRepository { Task AddShowLink(int showID, int? libraryID, int? collectionID); - - Task> GetFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromLibrary(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromLibrary(id, where, new Sort(sort), limit); - - Task> GetFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromLibrary(string slug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromLibrary(slug, where, new Sort(sort), limit); - - Task> GetFromCollection(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromCollection(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromCollection(id, where, new Sort(sort), limit); - - Task> GetFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromCollection(string slug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromCollection(slug, where, new Sort(sort), limit); - - Task GetFromSeason(int seasonID); - Task GetFromEpisode(int episodeID); } public interface ISeasonRepository : IRepository @@ -160,28 +117,6 @@ namespace Kyoo.Controllers Task Get(int showID, int seasonNumber); Task Get(string showSlug, int seasonNumber); Task Delete(string showSlug, int seasonNumber); - - Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showID, where, new Sort(sort), limit); - - Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showSlug, where, new Sort(sort), limit); - - Task GetFromEpisode(int episodeID); } public interface IEpisodeRepository : IRepository @@ -192,143 +127,10 @@ namespace Kyoo.Controllers Task GetAbsolute(int showID, int absoluteNumber); Task GetAbsolute(string showSlug, int absoluteNumber); Task Delete(string showSlug, int seasonNumber, int episodeNumber); - - Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showID, where, new Sort(sort), limit); - - Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetFromSeason(int seasonID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromSeason(int seasonID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromSeason(seasonID, where, new Sort(sort), limit); - Task> GetFromSeason(int showID, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromSeason(int showID, - int seasonNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromSeason(showID, seasonNumber, where, new Sort(sort), limit); - Task> GetFromSeason(string showSlug, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromSeason(string showSlug, - int seasonNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromSeason(showSlug, seasonNumber, where, new Sort(sort), limit); } - public interface ITrackRepository : IRepository - { - Task> GetFromEpisode(int episodeID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromEpisode(int episodeID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromEpisode(episodeID, where, new Sort(sort), limit); - - Task> GetFromEpisode(int showID, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromEpisode(int showID, - int seasonNumber, - int episodeNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromEpisode(showID, seasonNumber, episodeNumber, where, new Sort(sort), limit); - - Task> GetFromEpisode(string showSlug, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromEpisode(string showSlug, - int seasonNumber, - int episodeNumber, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromEpisode(showSlug, seasonNumber, episodeNumber, where, new Sort(sort), limit); - } - - public interface ILibraryRepository : IRepository - { - Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showID, where, new Sort(sort), limit); - - Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetFromCollection(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromCollection(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromCollection(id, where, new Sort(sort), limit); - - Task> GetFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromCollection(string slug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromCollection(slug, where, new Sort(sort), limit); - } + public interface ITrackRepository : IRepository { } + public interface ILibraryRepository : IRepository { } public interface ILibraryItemRepository : IRepository { @@ -353,79 +155,11 @@ namespace Kyoo.Controllers Expression> sort, Pagination limit = default ) => GetFromLibrary(librarySlug, where, new Sort(sort), limit); - } - - public interface ICollectionRepository : IRepository - { - Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showID, where, new Sort(sort), limit); + } - Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showSlug, where, new Sort(sort), limit); - - Task> GetFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromLibrary(int id, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromLibrary(id, where, new Sort(sort), limit); - - Task> GetFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromLibrary(string slug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromLibrary(slug, where, new Sort(sort), limit); - } - - public interface IGenreRepository : IRepository - { - Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(int showID, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showID, where, new Sort(sort), limit); - - Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default); - Task> GetFromShow(string showSlug, - [Optional] Expression> where, - Expression> sort, - Pagination limit = default - ) => GetFromShow(showSlug, where, new Sort(sort), limit); - } - - public interface IStudioRepository : IRepository - { - Task GetFromShow(int showID); - Task GetFromShow(string showSlug); - } + public interface ICollectionRepository : IRepository { } + public interface IGenreRepository : IRepository { } + public interface IStudioRepository : IRepository { } public interface IPeopleRepository : IRepository { @@ -469,5 +203,6 @@ namespace Kyoo.Controllers Pagination limit = default ) => GetFromPeople(showSlug, where, new Sort(sort), limit); } + public interface IProviderRepository : IRepository {} } \ No newline at end of file diff --git a/Kyoo.Common/Controllers/Implementations/LibraryManager.cs b/Kyoo.Common/Controllers/Implementations/LibraryManager.cs index 9fcd0730..4ef27fb1 100644 --- a/Kyoo.Common/Controllers/Implementations/LibraryManager.cs +++ b/Kyoo.Common/Controllers/Implementations/LibraryManager.cs @@ -241,18 +241,18 @@ namespace Kyoo.Controllers return ShowRepository.GetAll(where, sort, limit); } - public Task> GetSeasonsFromShow(Expression> where = null, + public Task> GetSeasons(Expression> where = null, Sort sort = default, - Pagination page = default) + Pagination limit = default) { - return SeasonRepository.GetAll(where, sort, page); + return SeasonRepository.GetAll(where, sort, limit); } - public Task> GetEpisodesFromShow(Expression> where = null, + public Task> GetEpisodes(Expression> where = null, Sort sort = default, - Pagination page = default) + Pagination limit = default) { - return EpisodeRepository.GetAll(where, sort, page); + return EpisodeRepository.GetAll(where, sort, limit); } public Task> GetTracks(Expression> where = null, @@ -290,213 +290,6 @@ namespace Kyoo.Controllers return ProviderRepository.GetAll(where, sort, page); } - public Task> GetSeasonsFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return SeasonRepository.GetFromShow(showID, where, sort, limit); - } - - public Task> GetSeasonsFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return SeasonRepository.GetFromShow(showSlug, where, sort, limit); - } - - public Task> GetEpisodesFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return EpisodeRepository.GetFromShow(showID, where, sort, limit); - } - - public Task> GetEpisodesFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return EpisodeRepository.GetFromShow(showSlug, where, sort, limit); - } - - public Task> GetEpisodesFromSeason(int seasonID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return EpisodeRepository.GetFromSeason(seasonID, where, sort, limit); - } - - public Task> GetEpisodesFromSeason(int showID, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return EpisodeRepository.GetFromSeason(showID, seasonNumber, where, sort, limit); - } - - public Task> GetEpisodesFromSeason(string showSlug, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return EpisodeRepository.GetFromSeason(showSlug, seasonNumber, where, sort, limit); - } - - public Task> GetPeopleFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return PeopleRepository.GetFromShow(showID, where, sort, limit); - } - - public Task> GetPeopleFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return PeopleRepository.GetFromShow(showSlug, where, sort, limit); - } - - public Task> GetGenresFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return GenreRepository.GetFromShow(showID, where, sort, limit); - } - - public Task> GetGenresFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return GenreRepository.GetFromShow(showSlug, where, sort, limit); - } - - public Task> GetTracksFromEpisode(int episodeID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return TrackRepository.GetFromEpisode(episodeID, where, sort, limit); - } - - public Task> GetTracksFromEpisode(int showID, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return TrackRepository.GetFromEpisode(showID, seasonNumber, episodeNumber, where, sort, limit); - } - - public Task> GetTracksFromEpisode(string showSlug, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return TrackRepository.GetFromEpisode(showSlug, seasonNumber, episodeNumber, where, sort, limit); - } - - public Task GetStudioFromShow(int showID) - { - return StudioRepository.GetFromShow(showID); - } - - public Task GetStudioFromShow(string showSlug) - { - return StudioRepository.GetFromShow(showSlug); - } - - public Task GetShowFromSeason(int seasonID) - { - return ShowRepository.GetFromSeason(seasonID); - } - - public Task GetShowFromEpisode(int episodeID) - { - return ShowRepository.GetFromEpisode(episodeID); - } - - public Task GetSeasonFromEpisode(int episodeID) - { - return SeasonRepository.GetFromEpisode(episodeID); - } - - public Task> GetLibrariesFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return LibraryRepository.GetFromShow(showID, where, sort, limit); - } - - public Task> GetLibrariesFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return LibraryRepository.GetFromShow(showSlug, where, sort, limit); - } - - public Task> GetCollectionsFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return CollectionRepository.GetFromShow(showID, where, sort, limit); - } - - public Task> GetCollectionsFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return CollectionRepository.GetFromShow(showSlug, where, sort, limit); - } - - public Task> GetShowsFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return ShowRepository.GetFromLibrary(id, where, sort, limit); - } - - public Task> GetShowsFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return ShowRepository.GetFromLibrary(slug, where, sort, limit); - } - - public Task> GetCollectionsFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return CollectionRepository.GetFromLibrary(id, where, sort, limit); - } - - public Task> GetCollectionsFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return CollectionRepository.GetFromLibrary(slug, where, sort, limit); - } - public Task> GetItemsFromLibrary(int id, Expression> where = null, Sort sort = default, @@ -512,37 +305,21 @@ namespace Kyoo.Controllers { return LibraryItemRepository.GetFromLibrary(librarySlug, where, sort, limit); } - - public Task> GetShowsFromCollection(int id, - Expression> where = null, - Sort sort = default, + + public Task> GetPeopleFromShow(int showID, + Expression> where = null, + Sort sort = default, Pagination limit = default) { - return ShowRepository.GetFromCollection(id, where, sort, limit); - } - - public Task> GetShowsFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return ShowRepository.GetFromCollection(slug, where, sort, limit); + return PeopleRepository.GetFromShow(showID, where, sort, limit); } - public Task> GetLibrariesFromCollection(int id, - Expression> where = null, - Sort sort = default, + public Task> GetPeopleFromShow(string showSlug, + Expression> where = null, + Sort sort = default, Pagination limit = default) { - return LibraryRepository.GetFromCollection(id, where, sort, limit); - } - - public Task> GetLibrariesFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - return LibraryRepository.GetFromCollection(slug, where, sort, limit); + return PeopleRepository.GetFromShow(showSlug, where, sort, limit); } public Task> GetRolesFromPeople(int id, diff --git a/Kyoo.Common/Models/PeopleRole.cs b/Kyoo.Common/Models/PeopleRole.cs index 870309a8..678ae7e7 100644 --- a/Kyoo.Common/Models/PeopleRole.cs +++ b/Kyoo.Common/Models/PeopleRole.cs @@ -25,12 +25,14 @@ namespace Kyoo.Models set => People.Name = value; } + [ExpressionRewrite(nameof(People) + "."+ nameof(Models.People.Poster))] public string Poster { get => People.Poster; set => People.Poster = value; } + [ExpressionRewrite(nameof(People) + "."+ nameof(Models.People.ExternalIDs))] public IEnumerable ExternalIDs { get => People.ExternalIDs; diff --git a/Kyoo/Controllers/Repositories/CollectionRepository.cs b/Kyoo/Controllers/Repositories/CollectionRepository.cs index 878292ee..230e79ae 100644 --- a/Kyoo/Controllers/Repositories/CollectionRepository.cs +++ b/Kyoo/Controllers/Repositories/CollectionRepository.cs @@ -4,9 +4,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Models; -using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Controllers { @@ -14,15 +12,11 @@ namespace Kyoo.Controllers { private bool _disposed; private readonly DatabaseContext _database; - private readonly Lazy _shows; - private readonly Lazy _libraries; protected override Expression> DefaultSort => x => x.Name; - public CollectionRepository(DatabaseContext database, IServiceProvider services) : base(database) + public CollectionRepository(DatabaseContext database) : base(database) { _database = database; - _shows = new Lazy(services.GetRequiredService); - _libraries = new Lazy(services.GetRequiredService); } public override void Dispose() @@ -31,10 +25,6 @@ namespace Kyoo.Controllers return; _disposed = true; _database.Dispose(); - if (_shows.IsValueCreated) - _shows.Value.Dispose(); - if (_libraries.IsValueCreated) - _libraries.Value.Dispose(); } public override async ValueTask DisposeAsync() @@ -43,12 +33,8 @@ namespace Kyoo.Controllers return; _disposed = true; await _database.DisposeAsync(); - if (_shows.IsValueCreated) - await _shows.Value.DisposeAsync(); - if (_libraries.IsValueCreated) - await _libraries.Value.DisposeAsync(); } - + public override async Task> Search(string query) { return await _database.Collections @@ -79,71 +65,5 @@ namespace Kyoo.Controllers _database.Entry(link).State = EntityState.Deleted; await _database.SaveChangesAsync(); } - - public async Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection collections = await ApplyFilters(_database.CollectionLinks - .Where(x => x.ShowID == showID) - .Select(x => (CollectionDE)x.Collection), - where, - sort, - limit); - if (!collections.Any() & await _shows.Value.Get(showID) == null) - throw new ItemNotFound(); - return collections; - } - - public async Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection collections = await ApplyFilters(_database.CollectionLinks - .Where(x => x.Show.Slug == showSlug) - .Select(x => (CollectionDE)x.Collection), - where, - sort, - limit); - if (!collections.Any() & await _shows.Value.Get(showSlug) == null) - throw new ItemNotFound(); - return collections; - } - - public async Task> GetFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection collections = await ApplyFilters(_database.LibraryLinks - .Where(x => x.LibraryID == id && x.CollectionID != null) - .Select(x => (CollectionDE)x.Collection), - where, - sort, - limit); - if (!collections.Any() && await _libraries.Value.Get(id) == null) - throw new ItemNotFound(); - return collections; - } - - public async Task> GetFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection collections = await ApplyFilters(_database.LibraryLinks - .Where(x => x.Library.Slug == slug && x.CollectionID != null) - .Select(x => (CollectionDE)x.Collection), - where, - sort, - limit); - if (!collections.Any() && await _libraries.Value.Get(slug) == null) - throw new ItemNotFound(); - return collections; - } } - - } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index 974271bc..fee27276 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -15,21 +15,13 @@ namespace Kyoo.Controllers private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; - private readonly IShowRepository _shows; - private readonly ISeasonRepository _seasons; protected override Expression> DefaultSort => x => x.EpisodeNumber; - public EpisodeRepository(DatabaseContext database, - IProviderRepository providers, - IShowRepository shows, - ISeasonRepository seasons) - : base(database) + public EpisodeRepository(DatabaseContext database, IProviderRepository providers) : base(database) { _database = database; _providers = providers; - _shows = shows; - _seasons = seasons; } @@ -131,80 +123,6 @@ namespace Kyoo.Controllers link.Provider = await _providers.CreateIfNotExists(link.Provider); } } - - public async Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection episodes = await ApplyFilters(_database.Episodes.Where(x => x.ShowID == showID), - where, - sort, - limit); - if (!episodes.Any() && await _shows.Get(showID) == null) - throw new ItemNotFound(); - return episodes; - } - - public async Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection episodes = await ApplyFilters(_database.Episodes.Where(x => x.Show.Slug == showSlug), - where, - sort, - limit); - if (!episodes.Any() && await _shows.Get(showSlug) == null) - throw new ItemNotFound(); - return episodes; - } - - public async Task> GetFromSeason(int seasonID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection episodes = await ApplyFilters(_database.Episodes.Where(x => x.SeasonID == seasonID), - where, - sort, - limit); - if (!episodes.Any() && await _seasons.Get(seasonID) == null) - throw new ItemNotFound(); - return episodes; - } - - public async Task> GetFromSeason(int showID, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection episodes = await ApplyFilters(_database.Episodes.Where(x => x.ShowID == showID - && x.SeasonNumber == seasonNumber), - where, - sort, - limit); - if (!episodes.Any() && await _seasons.Get(showID, seasonNumber) == null) - throw new ItemNotFound(); - return episodes; - } - - public async Task> GetFromSeason(string showSlug, - int seasonNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection episodes = await ApplyFilters(_database.Episodes.Where(x => x.Show.Slug == showSlug - && x.SeasonNumber == seasonNumber), - where, - sort, - limit); - if (!episodes.Any() && await _seasons.Get(showSlug, seasonNumber) == null) - throw new ItemNotFound(); - return episodes; - } public async Task Delete(string showSlug, int seasonNumber, int episodeNumber) { diff --git a/Kyoo/Controllers/Repositories/GenreRepository.cs b/Kyoo/Controllers/Repositories/GenreRepository.cs index 5d86abd2..549c2dc5 100644 --- a/Kyoo/Controllers/Repositories/GenreRepository.cs +++ b/Kyoo/Controllers/Repositories/GenreRepository.cs @@ -14,14 +14,12 @@ namespace Kyoo.Controllers { private bool _disposed; private readonly DatabaseContext _database; - private readonly Lazy _shows; protected override Expression> DefaultSort => x => x.Slug; - public GenreRepository(DatabaseContext database, IServiceProvider services) : base(database) + public GenreRepository(DatabaseContext database) : base(database) { _database = database; - _shows = new Lazy(services.GetRequiredService); } public override void Dispose() @@ -30,8 +28,6 @@ namespace Kyoo.Controllers return; _disposed = true; _database.Dispose(); - if (_shows.IsValueCreated) - _shows.Value.Dispose(); } public override async ValueTask DisposeAsync() @@ -40,8 +36,6 @@ namespace Kyoo.Controllers return; _disposed = true; await _database.DisposeAsync(); - if (_shows.IsValueCreated) - await _shows.Value.DisposeAsync(); } public override async Task> Search(string query) @@ -71,36 +65,5 @@ namespace Kyoo.Controllers _database.Entry(link).State = EntityState.Deleted; await _database.SaveChangesAsync(); } - - public async Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection genres = await ApplyFilters(_database.GenreLinks.Where(x => x.ShowID == showID) - .Select(x => (GenreDE)x.Genre), - where, - sort, - limit); - if (!genres.Any() && await _shows.Value.Get(showID) == null) - throw new ItemNotFound(); - return genres; - } - - public async Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection genres = await ApplyFilters(_database.GenreLinks - .Where(x => x.Show.Slug == showSlug) - .Select(x => (GenreDE)x.Genre), - where, - sort, - limit); - if (!genres.Any() && await _shows.Value.Get(showSlug) == null) - throw new ItemNotFound(); - return genres; - } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/LibraryRepository.cs b/Kyoo/Controllers/Repositories/LibraryRepository.cs index 665aa032..225f2532 100644 --- a/Kyoo/Controllers/Repositories/LibraryRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryRepository.cs @@ -15,16 +15,14 @@ namespace Kyoo.Controllers private bool _disposed; private readonly DatabaseContext _database; private readonly IProviderRepository _providers; - private readonly Lazy _shows; protected override Expression> DefaultSort => x => x.ID; - public LibraryRepository(DatabaseContext database, IProviderRepository providers, IServiceProvider services) + public LibraryRepository(DatabaseContext database, IProviderRepository providers) : base(database) { _database = database; _providers = providers; - _shows = new Lazy(services.GetRequiredService); } public override void Dispose() @@ -34,8 +32,6 @@ namespace Kyoo.Controllers _disposed = true; _database.Dispose(); _providers.Dispose(); - if (_shows.IsValueCreated) - _shows.Value.Dispose(); } public override async ValueTask DisposeAsync() @@ -45,8 +41,6 @@ namespace Kyoo.Controllers _disposed = true; await _database.DisposeAsync(); await _providers.DisposeAsync(); - if (_shows.IsValueCreated) - await _shows.Value.DisposeAsync(); } public override async Task> Search(string query) @@ -99,69 +93,5 @@ namespace Kyoo.Controllers _database.Entry(entry).State = EntityState.Deleted; await _database.SaveChangesAsync(); } - - public async Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection libraries = await ApplyFilters(_database.LibraryLinks - .Where(x => x.ShowID == showID) - .Select(x => (LibraryDE)x.Library), - where, - sort, - limit); - if (!libraries.Any() && await _shows.Value.Get(showID) == null) - throw new ItemNotFound(); - return libraries; - } - - public async Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection libraries = await ApplyFilters(_database.LibraryLinks - .Where(x => x.Show.Slug == showSlug) - .Select(x => (LibraryDE)x.Library), - where, - sort, - limit); - if (!libraries.Any() && await _shows.Value.Get(showSlug) == null) - throw new ItemNotFound(); - return libraries; - } - - public async Task> GetFromCollection(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection libraries = await ApplyFilters(_database.LibraryLinks - .Where(x => x.CollectionID == id) - .Select(x => (LibraryDE)x.Library), - where, - sort, - limit); - if (!libraries.Any() && await _shows.Value.Get(id) == null) - throw new ItemNotFound(); - return libraries; - } - - public async Task> GetFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection libraries = await ApplyFilters(_database.LibraryLinks - .Where(x => x.Collection.Slug == slug) - .Select(x => (LibraryDE)x.Library), - where, - sort, - limit); - if (!libraries.Any() && await _shows.Value.Get(slug) == null) - throw new ItemNotFound(); - return libraries; - } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index 7cb7243d..81a7c2af 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -17,20 +17,17 @@ namespace Kyoo.Controllers private readonly DatabaseContext _database; private readonly IProviderRepository _providers; private readonly Lazy _episodes; - private readonly IShowRepository _shows; protected override Expression> DefaultSort => x => x.SeasonNumber; public SeasonRepository(DatabaseContext database, IProviderRepository providers, - IShowRepository shows, IServiceProvider services) : base(database) { _database = database; _providers = providers; _episodes = new Lazy(services.GetRequiredService); - _shows = shows; } @@ -111,34 +108,6 @@ namespace Kyoo.Controllers } } - public async Task> GetFromShow(int showID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection seasons = await ApplyFilters(_database.Seasons.Where(x => x.ShowID == showID), - where, - sort, - limit); - if (!seasons.Any() && await _shows.Get(showID) == null) - throw new ItemNotFound(); - return seasons; - } - - public async Task> GetFromShow(string showSlug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection seasons = await ApplyFilters(_database.Seasons.Where(x => x.Show.Slug == showSlug), - where, - sort, - limit); - if (!seasons.Any() && await _shows.Get(showSlug) == null) - throw new ItemNotFound(); - return seasons; - } - public async Task Delete(string showSlug, int seasonNumber) { Season obj = await Get(showSlug, seasonNumber); @@ -161,10 +130,5 @@ namespace Kyoo.Controllers if (obj.Episodes != null) await _episodes.Value.DeleteRange(obj.Episodes); } - - public Task GetFromEpisode(int episodeID) - { - return _database.Seasons.FirstOrDefaultAsync(x => x.Episodes.Any(y => y.ID == episodeID)); - } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index 3f8f6a3b..03505365 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Models; -using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -20,8 +19,6 @@ namespace Kyoo.Controllers private readonly IProviderRepository _providers; private readonly Lazy _seasons; private readonly Lazy _episodes; - private readonly Lazy _libraries; - private readonly Lazy _collections; protected override Expression> DefaultSort => x => x.Title; public ShowRepository(DatabaseContext database, @@ -39,8 +36,6 @@ namespace Kyoo.Controllers _providers = providers; _seasons = new Lazy(services.GetRequiredService); _episodes = new Lazy(services.GetRequiredService); - _libraries = new Lazy(services.GetRequiredService); - _collections = new Lazy(services.GetRequiredService); } public override void Dispose() @@ -57,10 +52,6 @@ namespace Kyoo.Controllers _seasons.Value.Dispose(); if (_episodes.IsValueCreated) _episodes.Value.Dispose(); - if (_libraries.IsValueCreated) - _libraries.Value.Dispose(); - if (_collections.IsValueCreated) - _collections.Value.Dispose(); } public override async ValueTask DisposeAsync() @@ -77,10 +68,6 @@ namespace Kyoo.Controllers await _seasons.Value.DisposeAsync(); if (_episodes.IsValueCreated) await _episodes.Value.DisposeAsync(); - if (_libraries.IsValueCreated) - await _libraries.Value.DisposeAsync(); - if (_collections.IsValueCreated) - await _collections.Value.DisposeAsync(); } public override async Task> Search(string query) @@ -186,83 +173,5 @@ namespace Kyoo.Controllers if (obj.Episodes != null) await _episodes.Value.DeleteRange(obj.Episodes); } - - public async Task> GetFromLibrary(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection shows = await ApplyFilters(_database.LibraryLinks - .Where(x => x.LibraryID == id && x.ShowID != null) - .Select(x => (ShowDE)x.Show), - where, - sort, - limit); - if (!shows.Any() && await _libraries.Value.Get(id) == null) - throw new ItemNotFound(); - return shows; - } - - public async Task> GetFromLibrary(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection shows = await ApplyFilters(_database.LibraryLinks - .Where(x => x.Library.Slug == slug && x.ShowID != null) - .Select(x => (ShowDE)x.Show), - where, - sort, - limit); - if (!shows.Any() && await _libraries.Value.Get(slug) == null) - throw new ItemNotFound(); - return shows; - } - - public async Task> GetFromCollection(int id, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection shows = await ApplyFilters(_database.CollectionLinks - .Where(x => x.CollectionID== id) - .Select(x => (ShowDE)x.Show), - where, - sort, - limit); - if (!shows.Any() && await _libraries.Value.Get(id) == null) - throw new ItemNotFound(); - return shows; - } - - public async Task> GetFromCollection(string slug, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection shows = await ApplyFilters(_database.CollectionLinks - .Where(x => x.Collection.Slug == slug) - .Select(x => (ShowDE)x.Show), - where, - sort, - limit); - if (!shows.Any() && await _libraries.Value.Get(slug) == null) - throw new ItemNotFound(); - return shows; - } - - public Task GetFromSeason(int seasonID) - { - return _database.Shows - .FirstOrDefaultAsync(x => x.Seasons.Any(y => y.ID == seasonID)) - .Cast(); - } - - public Task GetFromEpisode(int episodeID) - { - return _database.Shows - .FirstOrDefaultAsync(x => x.Episodes.Any(y => y.ID == episodeID)) - .Cast(); - } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/StudioRepository.cs b/Kyoo/Controllers/Repositories/StudioRepository.cs index a8922f90..eebf0fdc 100644 --- a/Kyoo/Controllers/Repositories/StudioRepository.cs +++ b/Kyoo/Controllers/Repositories/StudioRepository.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Models; -using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; namespace Kyoo.Controllers @@ -48,27 +47,5 @@ namespace Kyoo.Controllers show.StudioID = null; await _database.SaveChangesAsync(); } - - public async Task GetFromShow(int showID) - { - Studio studio = await _database.Shows - .Where(x => x.ID == showID) - .Select(x => x.Studio) - .FirstOrDefaultAsync(); - if (studio == null && !_database.Shows.Any(x => x.ID == showID)) - throw new ItemNotFound(); - return studio; - } - - public async Task GetFromShow(string showSlug) - { - Studio studio = await _database.Shows - .Where(x => x.Slug == showSlug) - .Select(x => x.Studio) - .FirstOrDefaultAsync(); - if (studio == null && !_database.Shows.Any(x => x.Slug == showSlug)) - throw new ItemNotFound(); - return studio; - } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/TrackRepository.cs b/Kyoo/Controllers/Repositories/TrackRepository.cs index ed4f6da4..724e5c93 100644 --- a/Kyoo/Controllers/Repositories/TrackRepository.cs +++ b/Kyoo/Controllers/Repositories/TrackRepository.cs @@ -1,13 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Linq.Expressions; using System.Text.RegularExpressions; using System.Threading.Tasks; using Kyoo.Models; -using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Controllers { @@ -15,14 +12,12 @@ namespace Kyoo.Controllers { private bool _disposed; private readonly DatabaseContext _database; - private readonly Lazy _episodes; protected override Expression> DefaultSort => x => x.ID; - public TrackRepository(DatabaseContext database, IServiceProvider services) : base(database) + public TrackRepository(DatabaseContext database) : base(database) { _database = database; - _episodes = new Lazy(services.GetRequiredService); } public override void Dispose() @@ -31,8 +26,6 @@ namespace Kyoo.Controllers return; _disposed = true; _database.Dispose(); - if (_episodes.IsValueCreated) - _episodes.Value.Dispose(); } public override async ValueTask DisposeAsync() @@ -41,8 +34,6 @@ namespace Kyoo.Controllers return; _disposed = true; await _database.DisposeAsync(); - if (_episodes.IsValueCreated) - await _episodes.Value.DisposeAsync(); } public override Task Get(string slug) @@ -97,55 +88,5 @@ namespace Kyoo.Controllers _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } - - public async Task> GetFromEpisode(int episodeID, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection tracks = await ApplyFilters(_database.Tracks.Where(x => x.EpisodeID == episodeID), - where, - sort, - limit); - if (!tracks.Any() && await _episodes.Value.Get(episodeID) == null) - throw new ItemNotFound(); - return tracks; - } - - public async Task> GetFromEpisode(int showID, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection tracks = await ApplyFilters(_database.Tracks.Where(x => x.Episode.ShowID == showID - && x.Episode.SeasonNumber == seasonNumber - && x.Episode.EpisodeNumber == episodeNumber), - where, - sort, - limit); - if (!tracks.Any() && await _episodes.Value.Get(showID, seasonNumber, episodeNumber) == null) - throw new ItemNotFound(); - return tracks; - } - - public async Task> GetFromEpisode(string showSlug, - int seasonNumber, - int episodeNumber, - Expression> where = null, - Sort sort = default, - Pagination limit = default) - { - ICollection tracks = await ApplyFilters(_database.Tracks.Where(x => x.Episode.Show.Slug == showSlug - && x.Episode.SeasonNumber == seasonNumber - && x.Episode.EpisodeNumber == episodeNumber), - where, - sort, - limit); - if (!tracks.Any() && await _episodes.Value.Get(showSlug, seasonNumber, episodeNumber) == null) - throw new ItemNotFound(); - return tracks; - } } } \ No newline at end of file diff --git a/Kyoo/Tasks/Crawler.cs b/Kyoo/Tasks/Crawler.cs index 572abf84..bdc48342 100644 --- a/Kyoo/Tasks/Crawler.cs +++ b/Kyoo/Tasks/Crawler.cs @@ -63,7 +63,7 @@ namespace Kyoo.Controllers if (!Directory.Exists(show.Path)) await libraryManager.DeleteShow(show); - ICollection episodes = await libraryManager.GetEpisodesFromShow(); + ICollection episodes = await libraryManager.GetEpisodes(); ICollection libraries = argument == null ? await libraryManager.GetLibraries() : new [] { await libraryManager.GetLibrary(argument)}; diff --git a/Kyoo/Views/API/CollectionApi.cs b/Kyoo/Views/API/CollectionApi.cs index bb9675d2..501f15bc 100644 --- a/Kyoo/Views/API/CollectionApi.cs +++ b/Kyoo/Views/API/CollectionApi.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Mvc; @@ -39,8 +40,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetShowsFromCollection(id, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetShows( + ApiHelper.ParseWhere(where, x => x.Collections.Any(y => y.ID == id)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -71,8 +72,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetShowsFromCollection(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetShows( + ApiHelper.ParseWhere(where, x => x.Collections.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -103,8 +104,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetLibrariesFromCollection(id, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetLibraries( + ApiHelper.ParseWhere(where, x => x.Collections.Any(y => y.ID == id)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -135,8 +136,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetLibrariesFromCollection(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetLibraries( + ApiHelper.ParseWhere(where, x => x.Collections.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID)); diff --git a/Kyoo/Views/API/EpisodeApi.cs b/Kyoo/Views/API/EpisodeApi.cs index af29a341..13400016 100644 --- a/Kyoo/Views/API/EpisodeApi.cs +++ b/Kyoo/Views/API/EpisodeApi.cs @@ -2,6 +2,7 @@ using Kyoo.Models; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Kyoo.CommonApi; using Kyoo.Controllers; @@ -28,7 +29,7 @@ namespace Kyoo.Api [Authorize(Policy = "Read")] public async Task> GetShow(int episodeID) { - return await _libraryManager.GetShowFromEpisode(episodeID); + return await _libraryManager.GetShow(x => x.Episodes.Any(y => y.ID == episodeID)); } [HttpGet("{showSlug}-s{seasonNumber:int}e{episodeNumber:int}/show")] @@ -49,7 +50,7 @@ namespace Kyoo.Api [Authorize(Policy = "Read")] public async Task> GetSeason(int episodeID) { - return await _libraryManager.GetSeasonFromEpisode(episodeID); + return await _libraryManager.GetSeason(x => x.Episodes.Any(y => y.ID == episodeID)); } [HttpGet("{showSlug}-s{seasonNumber:int}e{episodeNumber:int}/season")] @@ -81,8 +82,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetTracksFromEpisode(episodeID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetTracks( + ApiHelper.ParseWhere(where, x => x.Episode.ID == episodeID), new Sort(sortBy), new Pagination(limit, afterID)); @@ -115,10 +116,10 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetTracksFromEpisode(showID, - seasonNumber, - episodeNumber, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetTracks( + ApiHelper.ParseWhere(where, x => x.Episode.ShowID == showID + && x.Episode.SeasonNumber == seasonNumber + && x.Episode.EpisodeNumber == episodeNumber), new Sort(sortBy), new Pagination(limit, afterID)); @@ -151,10 +152,9 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetTracksFromEpisode(showSlug, - seasonNumber, - episodeNumber, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetTracks(ApiHelper.ParseWhere(where, x => x.Episode.Show.Slug == showSlug + && x.Episode.SeasonNumber == seasonNumber + && x.Episode.EpisodeNumber == episodeNumber), new Sort(sortBy), new Pagination(limit, afterID)); diff --git a/Kyoo/Views/API/LibraryApi.cs b/Kyoo/Views/API/LibraryApi.cs index 86b00a66..8e573bf4 100644 --- a/Kyoo/Views/API/LibraryApi.cs +++ b/Kyoo/Views/API/LibraryApi.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Mvc; @@ -50,8 +51,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetShowsFromLibrary(id, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetShows( + ApiHelper.ParseWhere(where, x => x.Libraries.Any(y => y.ID == id)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -82,8 +83,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetShowsFromLibrary(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetShows( + ApiHelper.ParseWhere(where, x => x.Libraries.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -114,8 +115,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetCollectionsFromLibrary(id, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetCollections( + ApiHelper.ParseWhere(where, x => x.Libraries.Any(y => y.ID == id)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -146,8 +147,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetCollectionsFromLibrary(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetCollections( + ApiHelper.ParseWhere(where, x => x.Libraries.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID)); diff --git a/Kyoo/Views/API/SeasonApi.cs b/Kyoo/Views/API/SeasonApi.cs index 5825b370..819351b9 100644 --- a/Kyoo/Views/API/SeasonApi.cs +++ b/Kyoo/Views/API/SeasonApi.cs @@ -7,6 +7,7 @@ using Kyoo.Models; using Kyoo.Models.Exceptions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using System.Linq; using Microsoft.Extensions.Configuration; namespace Kyoo.Api @@ -39,8 +40,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetEpisodesFromSeason(seasonID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetEpisodes( + ApiHelper.ParseWhere(where, x => x.SeasonID == seasonID), new Sort(sortBy), new Pagination(limit, afterID)); @@ -72,9 +73,9 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetEpisodesFromSeason(showSlug, - seasonNumber, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetEpisodes( + ApiHelper.ParseWhere(where, x => x.Show.Slug == showSlug + && x.SeasonNumber == seasonNumber), new Sort(sortBy), new Pagination(limit, afterID)); @@ -106,9 +107,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetEpisodesFromSeason(showID, - seasonNumber, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetEpisodes( + ApiHelper.ParseWhere(where, x => x.ShowID == showID && x.SeasonNumber == seasonNumber), new Sort(sortBy), new Pagination(limit, afterID)); @@ -128,7 +128,7 @@ namespace Kyoo.Api [Authorize(Policy = "Read")] public async Task> GetShow(int seasonID) { - return await _libraryManager.GetShowFromSeason(seasonID); + return await _libraryManager.GetShow(x => x.Seasons.Any(y => y.ID == seasonID)); } [HttpGet("{showSlug}-s{seasonNumber:int}/show")] diff --git a/Kyoo/Views/API/ShowApi.cs b/Kyoo/Views/API/ShowApi.cs index 76d5436e..8e764457 100644 --- a/Kyoo/Views/API/ShowApi.cs +++ b/Kyoo/Views/API/ShowApi.cs @@ -2,6 +2,7 @@ using Kyoo.Models; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Kyoo.CommonApi; using Kyoo.Controllers; @@ -39,8 +40,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetSeasonsFromShow(showID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetSeasons( + ApiHelper.ParseWhere(where, x => x.ShowID == showID), new Sort(sortBy), new Pagination(limit, afterID)); @@ -71,8 +72,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetSeasonsFromShow(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetSeasons( + ApiHelper.ParseWhere(where, x => x.Show.Slug == slug), new Sort(sortBy), new Pagination(limit, afterID)); @@ -103,8 +104,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetEpisodesFromShow(showID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetEpisodes( + ApiHelper.ParseWhere(where, x => x.ShowID == showID), new Sort(sortBy), new Pagination(limit, afterID)); @@ -135,8 +136,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetEpisodesFromShow(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetEpisodes( + ApiHelper.ParseWhere(where, x => x.Show.Slug == slug), new Sort(sortBy), new Pagination(limit, afterID)); @@ -229,8 +230,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetGenresFromShow(showID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetGenres( + ApiHelper.ParseWhere(where, x => x.Shows.Any(y => y.ID == showID)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -261,8 +262,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetGenresFromShow(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetGenres( + ApiHelper.ParseWhere(where, x => x.Shows.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -284,7 +285,7 @@ namespace Kyoo.Api { try { - return await _libraryManager.GetStudioFromShow(showID); + return await _libraryManager.GetStudio(x => x.Shows.Any(y => y.ID == showID)); } catch (ItemNotFound) { @@ -298,7 +299,7 @@ namespace Kyoo.Api { try { - return await _libraryManager.GetStudioFromShow(slug); + return await _libraryManager.GetStudio(x => x.Shows.Any(y => y.Slug == slug)); } catch (ItemNotFound) { @@ -321,8 +322,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetLibrariesFromShow(showID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetLibraries( + ApiHelper.ParseWhere(where, x => x.Shows.Any(y => y.ID == showID)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -353,8 +354,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetLibrariesFromShow(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetLibraries( + ApiHelper.ParseWhere(where, x => x.Shows.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -385,8 +386,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetCollectionsFromShow(showID, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetCollections( + ApiHelper.ParseWhere(where, x => x.Shows.Any(y => y.ID == showID)), new Sort(sortBy), new Pagination(limit, afterID)); @@ -417,8 +418,8 @@ namespace Kyoo.Api try { - ICollection ressources = await _libraryManager.GetCollectionsFromShow(slug, - ApiHelper.ParseWhere(where), + ICollection ressources = await _libraryManager.GetCollections( + ApiHelper.ParseWhere(where, x => x.Shows.Any(y => y.Slug == slug)), new Sort(sortBy), new Pagination(limit, afterID));