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