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));
}
}
Bom, aparentemente a abordagem parece estar correta. Só falta um refinamento no DER, como por exemplo as regras aplicadas na camada física, PKs e FKs. Além de uma coisa que não ficou claro, o User (administrator) vai criar o perfil dos clientes (customers), entretanto, como os próprios customers irão se logar? Não parece ser previsto nesse modelo que você desenhou.