Controller
Criaremos um pacote (controller). Dentro dele criaremos um UserController com sua anotação @RestController.
Fazer o import do CreateUserInteractor, juntamente com seu construtor e um método create.
No nosso @PostMapping, trabalharemos com padrão DTO, para que possamos mudar a regra de API, sem mudar a regra de negócio.
Isso é ótimo até mesmo para não fazer informação de negócio que não seja necessária para a API.
Usaremos, portanto, Request e Response.
Criaremos duas classes, onde ambas serão records.
CreateUserRequest - Terá username, password e email como parâmetro.
CreateUserResponse. Terá username e email como parâmetro, (justamente para não retornamos a senha).
E na classe UserController, nosso endpoint retornará um CreateUserResponse e vai receber um CreateUserRequest chamada request.
Chamaremos o iteractor para fazermos a operação que a gente precisa. O problema é: o createUserIteractor recebe um User. Como criar uma forma de converter essa request em um user?
Dentro do pacote Controller, criaremos um UserDTOMapper, onde terá a mesma lógica do EntityMapper. Terá dois métodos:
Recebendo um CreateUserResponse(User user) e retornando esse new CreateUserResponse com username e email.
Uma função final que retonará um User. Nela receberemos um CreateUserRequest request que será transformada em um new User.
Voltando a classe Controller, injetaremos o DTO importando ele e passando dentro do construtor.
Já no endpoint, criaremos um User chamado userBusinessObj, passando o DTOMapper (importado acima) e converter o request para um User.
E a resposta (UserResponse), será um User cahamdo user, utilizando o método createUserInteractor.createUser (a função que está dentro dessa classe), passando o userBusinessObj criado acima.
O que retornaremos por fim, sera o userDtoMapper.toResponde(user).
Atualizado