Duas dicas em questão de código:
- Tente manter a conformidade entre a nomenclatura das classes/métodos.
- Há a mistura do português com o inglês, como é o caso de createClienteAddress.
- Em determinado momento, o cliente passa a ser chamado de User, defina qual será a nomenclatura padrão.
- Algumas classes podem ser substituidas por record o que lhe torna possível tirar o @AllArgsConstructor e consequentemente a dependência do Lombok.
Sobre a resolução do caso em si: Parece que a falha está no DDL do Banco de Dados. Só faz sentido existir um endereço se ele está vinculado a um cliente, logo: 1. client_id deverá ser NOT NULL e/ou 2. a Primary Key deve ser uma chave composta com o próprio address_id e o client_id (isso significa que não pode existir um endereço sem um cliente).Tendo resolvido isso, nem será possível adicionar novos registros se não estiverem em conformidade com essas regras e estourará Exception se tentar.
Se este registro tiver sido feito anteriormente e só quer correção, sugiro remover o registro e adicionar novamente OU fazer a inserção manual da edição direto no SQL.
Última dica: Parece que desenhou pouco como vai ser a solução, do que precisa ou não. Não parece nem ter um desenho claro do Banco de Dados, recomendo parar de colocar a mão no código um pouco e desenhar o DER e pelo menos um modelo de UML de como será o fluxo do processo.
Isso foi apenas um teste mesmo, pois está totalmente inglês o código-fonte. Apenas estou fazendo um projeto demo para demonstrar o meu objetivo, por isso que inclui lombok para uma produtividade melhor (pois não gosto de bibiliotecas de terceiros no código).
Arquitetura:https://prnt.sc/6oSSS-hKEv_x Diagrama: https://prnt.sc/mUT8cxgHmvdq
Agora pourco fiz outro teste e sinto que está errado:
@RestController
@RequestMapping("/users")
@AllArgsConstructor
public class UserController {
private final UserService service;
@PostMapping("/")
public ResponseEntity<User> createUser(@RequestBody User entity) {
return ResponseEntity
.status(HttpStatus.CREATED)
.body(service.createUser(entity));
}
@PostMapping("/{userId}/address")
public ResponseEntity<Address> createAddress(@PathVariable UUID userId,
@RequestBody Address entity) {
return ResponseEntity
.status(HttpStatus.CREATED)
.body(service.createAddress(userId, entity));
}
@GetMapping("/{userId}")
public ResponseEntity<User> getUserById(@PathVariable UUID userId) {
return ResponseEntity
.status(HttpStatus.OK)
.body(service.getUserById(userId));
}
@GetMapping("/{userId}/{addressId}")
public ResponseEntity<Optional<Address>> getAddressById(@PathVariable UUID userId,
@PathVariable UUID addressId) {
return ResponseEntity
.status(HttpStatus.OK)
.body(service.getAddressById(userId, addressId));
}
}