Implementação do Atualizar Pagamento
public PagamentoDto atualizarPagamento(Long id, PagamentoDto dto) {
Pagamento pagamento = modelMapper.map(dto, Pagamento.class);
pagamento.setId(id);
pagamento = repository.save(pagamento);
return modelMapper.map(pagamento, PagamentoDto.class);
}
Da maneira que o código está implementado pode ocorre falhas caso o cliente da API informe um id que não existe, o que vai acontecer é a criação de um novo Pagamento é não a atualização.
Principais motivos:
- Pode ser um id/entidade que não está sendo gerenciado pela JPA.
- Ao chamar a camada de repositório para salvar, ela criar um novo recurso já que estar no estado Transient.
Sugestão de melhoria
public PagamentoDto atualizarPagamento(Long id, PagamentoDto dto) {
Pagamento pagamento = getOrElseThrow(id);
pagamento.setValor(dto.getValor());
pagamento.setNome(dto.getNome());
pagamento.setNumero(dto.getNumero());
pagamento.setExpiracao(dto.getExpiracao());
pagamento.setCodigo(dto.getCodigo());
pagamento.setStatus(dto.getStatus());
pagamento.setPedidoId(dto.getPedidoId());
pagamento.setFormaDePagamentoId(dto.getFormaDePagamentoId());
repository.save(pagamento);
return modelMapper.map(pagamento, PagamentoDto.class);
}
private Pagamento getOrElseThrow(Long id) {
return repository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Pagamento não encontrado"));
}