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 IDbContextFactory _dbContextFactory; public MediaItemRepository(IDbContextFactory dbContextFactory) => _dbContextFactory = dbContextFactory; public async Task> Get(int id) { await using TvContext context = _dbContextFactory.CreateDbContext(); return await context.MediaItems .Include(i => i.LibraryPath) .OrderBy(i => i.Id) .SingleOrDefaultAsync(i => i.Id == id) .Map(Optional); } public async Task> GetAll() { await using TvContext context = _dbContextFactory.CreateDbContext(); return await context.MediaItems.ToListAsync(); } public async Task Update(MediaItem mediaItem) { await using TvContext context = _dbContextFactory.CreateDbContext(); context.MediaItems.Update(mediaItem); return await context.SaveChangesAsync() > 0; } } }