public async Task <BasketResultViewModel> AddBasket(int?gameId) { var basketResultViewModel = new BasketResultViewModel(); if (gameId == null) { basketResultViewModel.StatusCode = 404; basketResultViewModel.Message = "Не удалось найти игру."; return(basketResultViewModel); } var account = await db.Accounts .AsNoTracking() .FirstOrDefaultAsync(x => x.Email == User.Identity.Name); var currentBasket = await db.Baskets .AsNoTracking() .FirstOrDefaultAsync(x => x.AccountId == account.Id && x.GameId == gameId); if (currentBasket != null) { basketResultViewModel.StatusCode = 403; basketResultViewModel.Message = "Игра уже добавлена в корзину."; return(basketResultViewModel); } var basket = new Basket() { AccountId = account.Id, GameId = gameId.Value, Quantity = 1 }; await db.Baskets.AddAsync(basket); await db.SaveChangesAsync(); basketResultViewModel.StatusCode = 200; basketResultViewModel.Message = "Игра добавлена в корзину."; basketResultViewModel.BasketCnt = await db.Baskets .AsNoTracking() .Where(x => x.AccountId == account.Id) .SumAsync(x => x.Quantity); return(basketResultViewModel); }
public async Task <BasketResultViewModel> ChangeBasket([FromBody] Basket basket) { var basketResultViewModel = new BasketResultViewModel(); var account = await db.Accounts .AsNoTracking() .FirstOrDefaultAsync(x => x.Email == User.Identity.Name); var currentBasket = await db.Baskets.Include(x => x.Game) .FirstOrDefaultAsync(x => x.AccountId == account.Id && x.GameId == basket.GameId); if (currentBasket == null) { basketResultViewModel.StatusCode = 404; return(basketResultViewModel); } currentBasket.Quantity = basket.Quantity; await db.SaveChangesAsync(); basketResultViewModel.StatusCode = 200; basketResultViewModel.BasketSum = currentBasket.Game.Price * currentBasket.Quantity; basketResultViewModel.BasketCnt = await db.Baskets .AsNoTracking() .Where(x => x.AccountId == account.Id) .SumAsync(x => x.Quantity); basketResultViewModel.BasketTotalSum = await db.Baskets .Include(x => x.Game) .AsNoTracking() .Where(x => x.AccountId == account.Id) .SumAsync(x => x.Game.Price * x.Quantity); return(basketResultViewModel); }