using ErsatzTV.Core.Api.Channels; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Repositories; using static ErsatzTV.Application.Channels.Mapper; namespace ErsatzTV.Application.Channels; public class GetChannelByIdForApiHandler(IChannelRepository channelRepository) : IRequestHandler> { public async Task> Handle( GetChannelByIdForApi request, CancellationToken cancellationToken) { Option maybeChannel = await channelRepository.GetChannel(request.Id); foreach (Channel channel in maybeChannel) { var playoutIds = ContributingPlayouts(channel).Select(p => p.Id).Distinct().ToList(); Dictionary upcoming = await channelRepository.GetPlayoutUpcomingHealth(playoutIds, DateTime.UtcNow, cancellationToken); return ProjectToDetailResponseModel(channel, GetPlayoutsCount(channel), upcoming); } return Option.None; } }