MÉTODO PUT (UPDATE)
Put é parecido com o getOneProduct porque também precisamos passar o ID como parâmetro do que vamos atualizar.
@PutMapping("/products/{id}")
public ResponseEntity<Object> updateProduct(@PathVariable(value = "id") UUID id,
@RequestBody @Valid ProductRecordDto productRecordDto) {
Optional<ProductModel> productO = productRepository.findById(id);
if (productO.isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Product not found.");
}
var productModel = productO.get();
BeanUtils.copyProperties(productRecordDto, productModel);
return ResponseEntity.status(HttpStatus.OK).body(productRepository.save(productModel));
}
Continua recebendo o PathVariable e UUID.
Mas dessa vez, receberá também o RequestBody e Valid, pois precisamos do name e value (ProductRecordDto) para realizarmos o update.
Criamos a variável productO que utilizando o repository, irá verificar se primeiro, o produto existe (buscando pela ID).
Se existir, fazemos o if para saber se está vazio.
Se não estiver vazio, instanciaremos um ProductModel. Mas esse ProductModel, não será instanciado do zero igual na saveProduct. Iremos atribuir a essa variável o valor que ja recebeu da base dados "productO".
E daí damos o retorno padrão dando o OK e salvando.
Atualizado