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>()); }
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")); }
public static BasketLine From(string basketId, BasketLineForCreation basketLineForCreation) { return(new BasketLine { Id = null, BasketId = basketId, Price = basketLineForCreation.Price, EventId = basketLineForCreation.EventId, TicketAmount = basketLineForCreation.TicketAmount }); }
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")); }
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>()); }
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>()); }
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 )); }