public async Task <BasketLine> AddToBasket(Guid basketId, BasketLineForCreation basketLine)
        {
            //Since we have added savetokens = true, Tokens are saved into authentication cookie
            // headers, which ensures it's available on each request
            //so the below stmt is able to get acces token
            var token = await _httpContextAccessor.HttpContext.GetTokenAsync("access_token");

            if (basketId == Guid.Empty)
            {
                client.SetBearerToken(token);
                Guid userid = Guid.Parse(_httpContextAccessor.HttpContext
                                         .User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value);

                var basketResponse = await client.PostAsJson("api/baskets", new BasketForCreation { UserId = userid });

                var basket = await basketResponse.ReadContentAs <Basket>();

                basketId = basket.BasketId;
            }

            client.SetBearerToken(token);
            var response = await client.PostAsJson($"api/baskets/{basketId}/basketlines", basketLine);

            return(await response.ReadContentAs <BasketLine>());
        }
Esempio n. 2
0
        public async Task <ActionResult <BasketLine> > Post(Guid basketId,
                                                            [FromBody] BasketLineForCreation basketLineForCreation)
        {
            if (!await _basketRepository.BasketExists(basketId))
            {
                return(NotFound());
            }

            if (!await _eventRepository.EventExists(basketLineForCreation.EventId))
            {
                var eventFromCatalog = await _eventCatalogService.GetEvent(basketLineForCreation.EventId);

                _eventRepository.AddEvent(eventFromCatalog);
                await _eventRepository.SaveChanges();
            }

            var basketLineEntity = _mapper.Map <Entities.BasketLine>(basketLineForCreation);

            var processedBasketLine = await _basketLinesRepository.AddOrUpdateBasketLine(basketId, basketLineEntity);

            await _basketLinesRepository.SaveChanges();

            var basketLineToReturn = _mapper.Map <BasketLine>(processedBasketLine);

            return(CreatedAtRoute(
                       "GetBasketLine",
                       new { basketId = basketLineEntity.BasketId, basketLineId = basketLineEntity.BasketLineId },
                       basketLineToReturn));
        }
        public async Task <IActionResult> AddLine(BasketLineForCreation basketLine)
        {
            var basketId = Request.Cookies.GetCurrentBasketId(settings);
            var newLine  = await basketService.AddToBasket(basketId, basketLine);

            Response.Cookies.Append(settings.BasketIdCookieName, newLine.BasketId.ToString());

            return(RedirectToAction("Index"));
        }
Esempio n. 4
0
 public static BasketLine From(string basketId, BasketLineForCreation basketLineForCreation)
 {
     return(new BasketLine
     {
         Id = null,
         BasketId = basketId,
         Price = basketLineForCreation.Price,
         EventId = basketLineForCreation.EventId,
         TicketAmount = basketLineForCreation.TicketAmount
     });
 }
Esempio n. 5
0
        public async Task <IActionResult> AddLine(BasketLineForCreation basketLine)
        {
            var domain = $"{ HttpContext.Request.Scheme}://{HttpContext.Request.Host}";

            _basketService.SetBaseUri(domain);
            ViewBag.Domain = domain;

            var basketId = Request.Cookies.GetCurrentBasketId(settings);
            var newLine  = await _basketService.AddToBasket(basketId, basketLine);

            Response.Cookies.Append(settings.BasketIdCookieName, newLine.BasketId.ToString());

            return(RedirectToAction("Index"));
        }
Esempio n. 6
0
        public async Task <BasketLine> AddToBasket(Guid basketId, BasketLineForCreation basketLine)
        {
            if (basketId == Guid.Empty)
            {
                var basketResponse = await client.PostAsJson("/api/baskets", new BasketForCreation { UserId = settings.UserId });

                var basket = await basketResponse.ReadContentAs <Basket>();

                basketId = basket.BasketId;
            }

            var response = await client.PostAsJson($"api/baskets/{basketId}/basketlines", basketLine);

            return(await response.ReadContentAs <BasketLine>());
        }
Esempio n. 7
0
        public async Task <BasketLine> AddToBasket(Guid basketId, BasketLineForCreation basketLine)
        {
            if (basketId == Guid.Empty)
            {
                var basketResponse = await client.PostAsJson("api/baskets", new BasketForCreation { UserId =
                                                                                                        Guid.Parse(httpContextAccessor.HttpContext
                                                                                                                   .User.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value) });

                var basket = await basketResponse.ReadContentAs <Basket>();

                basketId = basket.BasketId;
            }
            var response = await client.PostAsJson($"api/baskets/{basketId}/basketlines", basketLine);

            return(await response.ReadContentAs <BasketLine>());
        }
        public async Task <BasketLine> AddToBasket(Guid basketId, BasketLineForCreation basketLine)
        {
            if (basketId == Guid.Empty)
            {
                _httpContextAccessor.HttpContext.User.TryGetClaim(JwtClaimTypes.Subject, out Guid userId);
                var basketResponse = await _client.PostAsJson("api/baskets", new BasketForCreation { UserId = userId });

                var basket = await basketResponse.ReadContentAs <Basket>();

                basketId = basket.BasketId;
            }

            var response = await _client.PostAsJson($"api/baskets/{basketId}/basketlines", basketLine);

            return(await response.ReadContentAs <BasketLine>());
        }
Esempio n. 9
0
        public async Task <ActionResult <BasketLine> > Post(Guid basketId, [FromBody] BasketLineForCreation basketLineForCreation)
        {
            var basket = await basketRepository.GetBasketById(basketId);

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

            if (!await eventRepository.EventExists(basketLineForCreation.EventId))
            {
                var eventFromCatalog = await eventCatalogService.GetEvent(basketLineForCreation.EventId);

                eventRepository.AddEvent(eventFromCatalog);
                await eventRepository.SaveChanges();
            }

            var basketLineEntity = mapper.Map <Entities.BasketLine>(basketLineForCreation);

            var processedBasketLine = await basketLinesRepository.AddOrUpdateBasketLine(basketId, basketLineEntity);

            await basketLinesRepository.SaveChanges();

            var basketLineToReturn = mapper.Map <BasketLine>(processedBasketLine);

            //log also to the event repo
            var basketChangeEvent = new BasketChangeEvent
            {
                BasketChangeType = BasketChangeTypeEnum.Add,
                EventId          = basketLineForCreation.EventId,
                InsertedAt       = DateTime.Now,
                UserId           = basket.UserId
            };
            await basketChangeEventRepository.AddBasketEvent(basketChangeEvent);

            return(CreatedAtRoute(
                       "GetBasketLine",
                       new { basketId = basketLineEntity.BasketId, basketLineId = basketLineEntity.BasketLineId },
                       basketLineToReturn));
        }
        public async Task <ActionResult <BasketLine> > CreateBasketLine(
            string basketId,
            [FromBody] BasketLineForCreation basketLineForCreation
            )
        {
            // basket이 없어서 basketLine 이 없는 건지, 아니면, basket이 없는건지 구별.
            var basket = await _dbContext.Baskets.FirstOrDefaultAsync(b => b.Id == basketId);

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

            // BasketLine과 관련된 Event 데이터를 끌어와서 저장
            //
            // [마이크로서비스]
            // - Events 가 서비스 2군데서 중복 저장하고 있다.
            // - 의존성이 없다고 하지만, 결국, EventCatalogService에 의존적 (CQRS 적용이 필요?!)
            var @event =
                await _dbContext.Events.FirstOrDefaultAsync(@event => @event.Id == basketLineForCreation.EventId);

            if (@event == null)
            {
                var eventFromCatalog = await _eventCatalogService.GetEvent(basketLineForCreation.EventId);

                await _dbContext.Events.AddAsync(eventFromCatalog);

                await _dbContext.SaveChangesAsync();

                @event = eventFromCatalog;
            }

            var basketLineEntity = await _dbContext
                                   .BasketLines
                                   .Include(line => line.Event)
                                   .Where(line => line.EventId == basketLineForCreation.EventId && line.BasketId == basketId)
                                   .FirstOrDefaultAsync()
            ;

            if (basketLineEntity == null)
            {
                basketLineEntity       = BasketLineEntityMapper.From(basketId, basketLineForCreation);
                basketLineEntity.Id    = Guid.NewGuid().ToDbStringId();
                basketLineEntity.Event = @event;
                await _dbContext.BasketLines.AddAsync(basketLineEntity);
            }
            else
            {
                basketLineEntity.TicketAmount += basketLineForCreation.TicketAmount;
            }
            await _dbContext.SaveChangesAsync();

            // event repo
            var basketChangeEvent = new BasketChangeEvent()
            {
                Id              = Guid.NewGuid().ToDbStringId(),
                EventId         = basketLineForCreation.EventId,
                InsertedAt      = DateTime.Now.ToDbDateTimeString(),
                UserId          = basket.UserId,
                BasetChangeType = BasketChangeTypeEnum.Add
            };
            await _dbContext.BasketChangeEvents.AddAsync(basketChangeEvent);

            await _dbContext.SaveChangesAsync();

            var basketLineDto = BasketLineDtoMapper.From(basketLineEntity);

            return(CreatedAtRoute(
                       "GetBasketLine",
                       new
            {
                basketId = basket.Id,
                basketLineId = basketLineEntity.Id,
            },
                       basketLineDto
                       ));
        }