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!!!")); } }
//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!!!")); } }