using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Repositories; using Microsoft.EntityFrameworkCore; namespace ErsatzTV.Infrastructure.Data.Repositories; public class ChannelRepository : IChannelRepository { private readonly IDbContextFactory _dbContextFactory; public ChannelRepository(IDbContextFactory dbContextFactory) => _dbContextFactory = dbContextFactory; public async Task> GetChannel(int id) { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); return await dbContext.Channels .Include(c => c.Artwork) .Include(c => c.Watermark) .OrderBy(c => c.Id) .SingleOrDefaultAsync(c => c.Id == id) .Map(Optional); } public async Task> GetByNumber(string number) { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); return await dbContext.Channels .Include(c => c.FFmpegProfile) .ThenInclude(p => p.Resolution) .Include(c => c.Artwork) .Include(c => c.Watermark) .OrderBy(c => c.Number) .SingleOrDefaultAsync(c => c.Number == number) .Map(Optional); } public async Task> GetAll() { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(); return await dbContext.Channels .Include(c => c.FFmpegProfile) .Include(c => c.Artwork) .Include(c => c.Playouts) .ToListAsync(); } }