示例#1
0
        public static BasketLine ToDomain(this BasketLineForCreationModel source)
        {
            if (source == null)
            {
                return(null);
            }

            return(new BasketLine
            {
                Price = source.Price,
                EventId = source.EventId,
                TicketAmount = source.TicketAmount
            });
        }
示例#2
0
        public async Task <ActionResult <BasketLineModel> > Post(Guid basketId,
                                                                 [FromBody] BasketLineForCreationModel basketLineForCreation)
        {
            var basket = await _mediator.Send(new GetBasketByIdQuery(basketId));

            if (basket == null)
            {
                return(NotFound());
            }

            if (!await _mediator.Send(new EventExistsQuery(basketLineForCreation.EventId)))
            {
                var eventFromCatalog = await _catalogService.GetEvent(basketLineForCreation.EventId);

                await _mediator.Send(new AddEventCommand(eventFromCatalog.ToDomain()));
            }

            var basketLineEntity = basketLineForCreation.ToDomain();

            var processedBasketLine =
                await _mediator.Send(new AddOrUpdateBasketLineCommand(basketId, basketLineEntity));

            var basketLineToReturn = processedBasketLine.ToModel();

            var basketChangeEvent = new BasketChangeEvent
            {
                BasketChangeType = BasketChangeTypeEnum.Add,
                EventId          = basketLineForCreation.EventId,
                InsertedAt       = DateTime.Now,
                UserId           = basket.UserId
            };
            await _mediator.Send(new AddBasketEventCommand(basketChangeEvent));

            return(CreatedAtRoute(
                       "GetBasketLine",
                       new { basketId = basketLineEntity.BasketId, basketLineId = basketLineEntity.BasketLineId },
                       basketLineToReturn));
        }