예제 #1
0
        public async Task <CadastroEndereco> InserirEnderecoAsync(NovoEndereco novoEndereco)
        {
            if (novoEndereco == null)
            {
                throw new ArgumentNullException(nameof(novoEndereco));
            }

            var estado = await _context.Set <Estado>()
                         .Where(est => est.Sigla.Equals(novoEndereco.Estado.ToUpper()))
                         .SingleOrDefaultAsync();

            if (estado == null)
            {
                return(CadastroEndereco.EstadoInvalido);
            }

            var endereco = new Endereco(novoEndereco)
            {
                Estado = estado
            };

            await _context.Set <Endereco>()
            .AddAsync(endereco);

            await _context.SaveChangesAsync();

            return(CadastroEndereco.Sucesso);
        }
        public async Task <IActionResult> InserirEndereco([FromBody] NovoEndereco endereco)
        {
            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))
                {
                    endereco.ClienteId = clienteId;

                    var resultado = await _clienteService
                                    .InserirEnderecoAsync(endereco);

                    switch (resultado)
                    {
                    case CadastroEndereco.EstadoInvalido:
                        _logger.LogInformation($"Cliente - InserirEndereco - Erro - Estado inválido ClienteId '{clienteId}', Estado '{endereco.Estado}'");

                        return(StatusCode((int)HttpStatusCode.BadRequest,
                                          Json("Estado inválido")));

                    default:
                        _logger.LogInformation($"Cliente - InserirEndereco - Sucesso - ClienteId '{clienteId}'");

                        return(StatusCode((int)HttpStatusCode.OK,
                                          Json("Endereço cadastrado!")));
                    }
                }
                else
                {
                    _logger.LogWarning($"Cliente - InserirEndereco - Erro - ClienteId não numérico '{claimId}'");

                    return(StatusCode((int)HttpStatusCode.Unauthorized));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Cliente - AdicionarEndereco - Erro");

                return(StatusCode((int)HttpStatusCode.InternalServerError,
                                  Json("Ocorreu um erro ao processar a requisição.")));
            }
        }