Пример #1
0
        /// <see cref="IConcertService.GetConcert"/>
        public EventModel GetConcert(int id)
        {
            var res = ConcertModelHelper.GetConcertModel(_concertRepository.GetConcert(id));

            //res.Tickets = new ConcertTicketModel { TimeStart = new TimeSpan(8, 15, 0), DateStart = new DateTime(2016, 9, 10)};
            return(res);
        }
        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);
        }