Пример #1
0
        public IActionResult UpdateFullPiloto([FromBody] PilotoModel pilotoModel)
        {
            try
            {
                if (!_pilotoRepository.ExistByID(pilotoModel.ID))
                {
                    return(StatusCode(StatusCodes.Status404NotFound, "Piloto não encontrado."));
                }

                var piloto = _mapper.Map <Piloto>(pilotoModel);
                _pilotoRepository.UpdateFull(piloto);

                return(StatusCode(StatusCodes.Status204NoContent, "Atualização completa realizada com sucesso."));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Erro. Entrar em contato com o suporte!!!"));
            }
        }
Пример #2
0
        //public IActionResult AddPiloto([FromBody] Piloto piloto) // Má prática: não expor a classe (lá do dominio) aqui no controller
        public IActionResult AddPiloto([FromBody] PilotoModel pilotoModel)// Boa prática: usar Model. É uma forma de "esconder" e melhorar isso, é utilizando padrão de projeto MVC (no caso, o M).
        {
            /* Exemplo 1:
             * Adiciono o piloto e retorno um ok, apenas.
             * Na parametrização: informo ao .NET Core que os dados do piloto, veem do "corpo" do HTML. No formato JSON.
             *
             * Não é uma boa práica colocar a entidade direto aqui na requisição. O certo é utilizar o AutoMapper.
             */
            //_pilotoRepository.Add(piloto);
            //return Ok();

            /* Exemplo 2: mais elaborado
             */
            try
            {
                _logger.LogInformation("Mapeando piloto modelo.");

                /* Leitura:
                 * Mapeando a classe "PilotoModel" (origem) para a classe "Piloto" (destino)
                 */
                var piloto = _mapper.Map <Piloto>(pilotoModel);

                _logger.LogInformation($"Verificando se existe piloto com ID { piloto.ID }.");
                if (_pilotoRepository.ExistByID(piloto.ID))
                {
                    _logger.LogWarning($"Já existe um piloto com ID { piloto.ID }.");
                    return(StatusCode(StatusCodes.Status406NotAcceptable, "Já existe piloto com esse ID!"));
                }

                // forçando um erro para ver o conteúdo do log com Exception
                //int numero = int.Parse("B");

                _logger.LogInformation("Adicionando piloto...");
                _logger.LogInformation($"ID: { piloto.ID }.");
                _logger.LogInformation($"Nome: { piloto.Nome }.");
                _logger.LogInformation($"Sobrenome: { piloto.Sobrenome }.");
                _pilotoRepository.Add(piloto);
                _logger.LogInformation("Piloto adicionado com sucesso.");
                // Simplesmente retorno um Ok...
                //return StatusCode(StatusCodes.Status201Created, "Piloto adicionado.");

                // Mas posso utilizar um esquema para, além de informar que Ok(created), mostrar a "rota" onde está esse novo recurso. Tenho que criar a rota.

                /* Leitura:
                 * Os parâmetros são:
                 * 1 - O nome da rota (o CreateAtRoute vai apontar para essa rota). Essa nova rota é um método aqui no controller mesmo, (HttpGet)
                 * 2 - Um objeto anônimo (com ID do piloto adicionado... essa propriedado do obejto anônimo, tem que ser exatamente o mesmo no método que oou criar)
                 * 3 - Objeto do Piloto adicionado
                 */

                //piloto.Nome += "(Created v2)"; // testes

                _logger.LogInformation("Mapeando o retorno.");
                // Para não passar o objeto da instância da classe do repositório novamente, altero para a classe model...
                // return CreatedAtRoute("GetCreated", new { id = piloto.ID }, piloto);
                var pilotoModelResponse = _mapper.Map <PilotoModel>(piloto);

                _logger.LogInformation("Chamando a rota 'GetCreated'.");
                return(CreatedAtRoute("GetCreated", new { id = piloto.ID }, pilotoModelResponse));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.ToString());
                return(StatusCode(StatusCodes.Status500InternalServerError, "Erro. Entrar em contato com o suporte!!!"));
            }
        }