using WatchIt.Database.Model.Genres; using WatchIt.Database.Model.Media; using WatchIt.DTO.Models.Controllers.Genres.Genre; using WatchIt.DTO.Models.Controllers.Media.Medium.Query; using WatchIt.DTO.Query; namespace WatchIt.WebAPI.Repositories.Media; public interface IMediaRepository : IRepository { Task ExistsAsync(long id); Task GetAsync(long id, Func, IQueryable>? additionalIncludes = null); Task GetAsync(long id, Func, IQueryable>? additionalIncludes = null) where T : Medium; Task> GetAllAsync(MediumFilterQuery filterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task> GetAllMoviesAsync(MediumMovieFilterQuery filterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task> GetAllSeriesAsync(MediumSeriesFilterQuery filterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task UpdateAsync(long id, Action updateFunc) where T : Medium; Task> GetMediumGenresAsync(long id, GenreFilterQuery filterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task AddMediumGenreAsync(long mediumId, short genreId); Task DeleteMediumGenreAsync(long mediumId, short genreId); Task> GetAllRatedByAccountAsync(long accountId, MediumFilterQuery filterQuery, MediumUserRatedFilterQuery userRatedFilterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task> GetAllMoviesRatedByAccountAsync(long accountId, MediumMovieFilterQuery filterQuery, MediumUserRatedFilterQuery userRatedFilterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task> GetAllSeriesRatedByAccountAsync(long accountId, MediumSeriesFilterQuery filterQuery, MediumUserRatedFilterQuery userRatedFilterQuery, OrderQuery orderQuery, PagingQuery pagingQuery, Func, IQueryable>? additionalIncludes = null); Task GetMediumUserRatingAsync(long mediumId, long accountId, Func, IQueryable>? additionalIncludes = null); Task UpdateOrAddMediumRatingAsync(long mediumId, long accountId, Func addFunc, Action updateFunc); Task DeleteMediumUserRatingAsync(long mediumId, long accountId); Task UpdateOrAddMediumViewCountAsync(long mediumId, DateOnly date, Func addFunc, Action updateFunc); Task GetMediumPictureAsync(long id, Func, IQueryable>? additionalIncludes = null); Task UpdateOrAddMediumPictureAsync(long id, Func addFunc, Action updateFunc); Task DeleteMediumPictureAsync(long id); }