private Task PublishPurchaseFailure(SellTicketsRequest request, string concertName) { return(_eventPublisher.Publish(new PurchaseFailedEvent( Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), request.ConcertId, concertName, request.BuyerId, request.Quantity))); }
public async Task <Result <Purchase> > SellTickets(SellTicketsRequest request) { var possibleConcert = await _concertRepository.GetConcert(request.ConcertId); var result = await possibleConcert .ToResult(Errors.ConcertNotFound) .OnFailure(error => PublishPurchaseFailure(request, "Unknown")) .Bind(async concert => { var possibleBuyer = await _buyerRepository.GetBuyer(request.BuyerId); return(await possibleBuyer .ToResult(Errors.BuyerNotFound) .Bind(buyer => _ticketsService.SellTickets(concert, buyer, new TicketQuantity(request.Quantity))) .Tap(purchase => PublishPurchaseSuccess(purchase)) .OnFailure(error => PublishPurchaseFailure(request, concert.Name))); }); return(result); }