using ErsatzTV.Core.Domain; using ErsatzTV.Core.Interfaces.Repositories; using static ErsatzTV.Application.Television.Mapper; namespace ErsatzTV.Application.Television; public class GetTelevisionShowByIdHandler : IRequestHandler> { private readonly IMediaSourceRepository _mediaSourceRepository; private readonly ISearchRepository _searchRepository; private readonly ITelevisionRepository _televisionRepository; public GetTelevisionShowByIdHandler( ITelevisionRepository televisionRepository, ISearchRepository searchRepository, IMediaSourceRepository mediaSourceRepository) { _televisionRepository = televisionRepository; _searchRepository = searchRepository; _mediaSourceRepository = mediaSourceRepository; } public async Task> Handle( GetTelevisionShowById request, CancellationToken cancellationToken) { Option maybeShow = await _televisionRepository.GetShow(request.Id); return await maybeShow.Match>>( async show => { Option maybeJellyfin = await _mediaSourceRepository.GetAllJellyfin() .Map(list => list.HeadOrNone()); Option maybeEmby = await _mediaSourceRepository.GetAllEmby() .Map(list => list.HeadOrNone()); List mediaCodes = await _searchRepository.GetLanguagesForShow(show); List languageCodes = await _searchRepository.GetAllThreeLetterLanguageCodes(mediaCodes); return ProjectToViewModel(show, languageCodes, maybeJellyfin, maybeEmby); }, () => Task.FromResult(Option.None)); } }