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.

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:

  1. Recebendo um CreateUserResponse(User user) e retornando esse new CreateUserResponse com username e email.

  2. 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