diff --git a/ErsatzTV.Application/MediaCards/Mapper.cs b/ErsatzTV.Application/MediaCards/Mapper.cs index 719aa06c1..e62863b9b 100644 --- a/ErsatzTV.Application/MediaCards/Mapper.cs +++ b/ErsatzTV.Application/MediaCards/Mapper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using ErsatzTV.Core.Domain; @@ -37,19 +38,20 @@ namespace ErsatzTV.Application.MediaCards televisionEpisode.Poster, televisionEpisode.Metadata?.Episode.ToString()); - internal static MovieCardViewModel ProjectToViewModel(Movie movie) => + internal static MovieCardViewModel ProjectToViewModel(NewMovieMetadata movieMetadata) => new( - movie.Id, - movie.Metadata?.Title, - movie.Metadata?.Year?.ToString(), - movie.Metadata?.SortTitle, - movie.Poster); + movieMetadata.MovieId, + movieMetadata.Title, + movieMetadata.ReleaseDate?.Year.ToString(), + movieMetadata.SortTitle, + null); // TODO: artwork internal static SimpleMediaCollectionCardResultsViewModel ProjectToViewModel(SimpleMediaCollection collection) => new( collection.Name, - collection.Movies.Map(ProjectToViewModel).ToList(), + // TODO: fix this + new List(), // collection.Movies.Map(ProjectToViewModel).ToList(), collection.TelevisionShows.Map(ProjectToViewModel).ToList(), collection.TelevisionSeasons.Map(ProjectToViewModel).ToList(), collection.TelevisionEpisodes.Map(ProjectToViewModel).ToList()); diff --git a/ErsatzTV.Core/Interfaces/Repositories/IMovieRepository.cs b/ErsatzTV.Core/Interfaces/Repositories/IMovieRepository.cs index 393000bb9..4b8808545 100644 --- a/ErsatzTV.Core/Interfaces/Repositories/IMovieRepository.cs +++ b/ErsatzTV.Core/Interfaces/Repositories/IMovieRepository.cs @@ -12,6 +12,6 @@ namespace ErsatzTV.Core.Interfaces.Repositories Task> GetOrAdd(PlexLibrary library, PlexMovie item); Task Update(Movie movie); Task GetMovieCount(); - Task> GetPagedMovies(int pageNumber, int pageSize); + Task> GetPagedMovies(int pageNumber, int pageSize); } } diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs index 751c942c5..96b852021 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MovieRepository.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Threading.Tasks; +using Dapper; using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Repositories; @@ -14,8 +16,13 @@ namespace ErsatzTV.Infrastructure.Data.Repositories public class MovieRepository : IMovieRepository { private readonly TvContext _dbContext; + private readonly IDbConnection _dbConnection; - public MovieRepository(TvContext dbContext) => _dbContext = dbContext; + public MovieRepository(TvContext dbContext, IDbConnection dbConnection) + { + _dbContext = dbContext; + _dbConnection = dbConnection; + } public Task> GetMovie(int movieId) => _dbContext.Movies @@ -57,17 +64,13 @@ namespace ErsatzTV.Infrastructure.Data.Repositories } public Task GetMovieCount() => - _dbContext.Movies - .AsNoTracking() - .CountAsync(); + _dbConnection.QuerySingleAsync(@"SELECT COUNT(DISTINCT MovieId) FROM NewMovieMetadata"); - public Task> GetPagedMovies(int pageNumber, int pageSize) => - _dbContext.Movies - .Include(s => s.MovieMetadata) - .OrderBy(s => s.MovieMetadata.FirstOrDefault().SortTitle) - .Skip((pageNumber - 1) * pageSize) - .Take(pageSize) - .AsNoTracking() + public Task> GetPagedMovies(int pageNumber, int pageSize) => + _dbContext.MovieMetadata.FromSqlRaw(@"SELECT * FROM NewMovieMetadata WHERE Id IN + (SELECT Id FROM NewMovieMetadata GROUP BY MovieId, MetadataKind HAVING MetadataKind = MAX(MetadataKind)) + ORDER BY SortTitle + LIMIT {0} OFFSET {1}", pageSize, (pageNumber - 1) * pageSize) .ToListAsync(); private async Task> AddMovie(int libraryPathId, string path) diff --git a/ErsatzTV.Infrastructure/Data/TvContext.cs b/ErsatzTV.Infrastructure/Data/TvContext.cs index d14ed5b83..d3aca10cf 100644 --- a/ErsatzTV.Infrastructure/Data/TvContext.cs +++ b/ErsatzTV.Infrastructure/Data/TvContext.cs @@ -21,6 +21,7 @@ namespace ErsatzTV.Infrastructure.Data public DbSet PlexLibraries { get; set; } public DbSet MediaItems { get; set; } public DbSet Movies { get; set; } + public DbSet MovieMetadata { get; set; } public DbSet Shows { get; set; } public DbSet Seasons { get; set; } public DbSet Episodes { get; set; }