using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Core.FFmpeg; using ErsatzTV.Core.Interfaces.Repositories; namespace ErsatzTV.Application.Streaming; public class GetConcatPlaylistByChannelNumberHandler : IRequestHandler> { private readonly IChannelRepository _channelRepository; public GetConcatPlaylistByChannelNumberHandler(IChannelRepository channelRepository) => _channelRepository = channelRepository; public Task> Handle( GetConcatPlaylistByChannelNumber request, CancellationToken cancellationToken) => Validate(request) .MapT(channel => new ConcatPlaylist(request.Scheme, request.Host, channel.Number, request.Mode)) .Map(v => v.ToEither()); private Task> Validate(GetConcatPlaylistByChannelNumber request) => ChannelMustExist(request); private async Task> ChannelMustExist(GetConcatPlaylistByChannelNumber request) => (await _channelRepository.GetByNumber(request.ChannelNumber)) .ToValidation($"Channel number {request.ChannelNumber} does not exist."); }