using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Repositories; using LanguageExt; using Microsoft.EntityFrameworkCore; using static LanguageExt.Prelude; namespace ErsatzTV.Infrastructure.Data.Repositories { public class MediaItemRepository : IMediaItemRepository { private readonly TvContext _dbContext; public MediaItemRepository(TvContext dbContext) => _dbContext = dbContext; public Task> Get(int id) => _dbContext.MediaItems .Include(i => i.LibraryPath) .OrderBy(i => i.Id) .SingleOrDefaultAsync(i => i.Id == id) .Map(Optional); public Task> GetAll() => _dbContext.MediaItems.ToListAsync(); public Task> Search(string searchString) => // TODO: fix this when we need to search // IQueryable episodeData = // from c in _dbContext.TelevisionEpisodeMediaItems.Include(c => c.LibraryPath) select c; // // if (!string.IsNullOrEmpty(searchString)) // { // episodeData = episodeData.Where(c => EF.Functions.Like(c.Metadata.Title, $"%{searchString}%")); // } // // IQueryable movieData = // from c in _dbContext.Movies.Include(c => c.LibraryPath) select c; // // // if (!string.IsNullOrEmpty(searchString)) // // { // // movieData = movieData.Where(c => EF.Functions.Like(c.Metadata.Title, $"%{searchString}%")); // // } // // return episodeData.OfType().Concat(movieData.OfType()).ToListAsync(); new List().AsTask(); public async Task Update(MediaItem mediaItem) { _dbContext.MediaItems.Update(mediaItem); return await _dbContext.SaveChangesAsync() > 0; } } }