public async Task <bool> InserirItemCarrinhoAsync(NovoCarrinhoItem novoCarrinhoItem) { if (novoCarrinhoItem == null) { throw new ArgumentNullException(nameof(novoCarrinhoItem)); } var carrinhoItem = await _context.Set <CarrinhoItem>() .Where(cItem => cItem.ClienteId.Equals(novoCarrinhoItem.ClienteId) && cItem.ProdutoId.Equals(novoCarrinhoItem.ProdutoId)) .SingleOrDefaultAsync(); if (carrinhoItem == null) { carrinhoItem = new CarrinhoItem(novoCarrinhoItem); await _context.Set <CarrinhoItem>() .AddAsync(carrinhoItem); } else { carrinhoItem.Quantidade += novoCarrinhoItem.Quantidade; } await _context.SaveChangesAsync(); return(true); }
public async Task <IActionResult> AdicionarAoCaorrinho([FromBody] NovoCarrinhoItem carrinhoItem) { try { if (!ModelState.IsValid) { var errors = ModelState.Select(model => model.Value.Errors) .Where(model => model.Count > 0) .SelectMany(errors => errors.Select(erro => erro.ErrorMessage)); return(StatusCode((int)HttpStatusCode.BadRequest, Json(errors))); } var claimId = User ?.FindFirst(ClaimTypes.PrimarySid) ?.Value; if (long.TryParse(claimId, out long clienteId)) { carrinhoItem.ClienteId = clienteId; var resultado = await _carrinhoService .InserirItemCarrinhoAsync(carrinhoItem); if (resultado) { _logger.LogInformation($"Carrinho - AdicionarAoCarrinho - Sucesso - ClienteId '{clienteId}'"); return(StatusCode((int)HttpStatusCode.OK, Json("Item adicionado ao carrinho!"))); } else { _logger.LogInformation($"Carrinho - AdicionarAoCarrinho - Erro - Estado inválido carrinho '{clienteId}'"); return(StatusCode((int)HttpStatusCode.BadRequest, Json("Falha ao adicionar ao carrinho"))); } } else { _logger.LogWarning($"Carrinho - AdicionarAoCarrinho - Erro - ClienteId não numérico '{claimId}'"); return(StatusCode((int)HttpStatusCode.Unauthorized, Json("Precisa estar logado!"))); } } catch (Exception ex) { _logger.LogError(ex, $"Carrinho - AdicionarEndereco - Erro"); return(StatusCode((int)HttpStatusCode.InternalServerError, Json("Ocorreu um erro ao processar a requisição."))); } }