using System.Threading; using System.Threading.Tasks; using ErsatzTV.Core; using ErsatzTV.Core.Interfaces.Repositories; using LanguageExt; using MediatR; namespace ErsatzTV.Application.Playouts.Commands { public class DeletePlayoutHandler : IRequestHandler> { private readonly IPlayoutRepository _playoutRepository; public DeletePlayoutHandler(IPlayoutRepository playoutRepository) => _playoutRepository = playoutRepository; public async Task> Handle( DeletePlayout request, CancellationToken cancellationToken) => (await PlayoutMustExist(request)) .Map(DoDeletion) .ToEither(); private Task DoDeletion(int playoutId) => _playoutRepository.Delete(playoutId); private async Task> PlayoutMustExist( DeletePlayout deletePlayout) => (await _playoutRepository.Get(deletePlayout.PlayoutId)) .ToValidation($"Playout {deletePlayout.PlayoutId} does not exist.") .Map(c => c.Id); } }