Criando DTO e estruturando camadas
Conforme destacado acima, pontuamos que possuimos diversas coisas a serem melhoradas, vamos lá!
Primeiro, vamos entender uma coisa, o que seria DTO?
DTO - Data Transfer Object é um objeto simples para transferirmos dados.
Ele não é gerenciado por uma lib de ORM (JPA) / acesso a dados.
Além disso, pode conter outros DTO's aninhados.
❗NUNCA ANINHE UMA ENTITY DENTRO DE UM DTO
Pra quê usar DTO?
Diversos motivos, veja:
Projeção de Dados (projetar somente os dados que você precisa). O Product tem diversos atributos mas você pode, por exemplo, querer uma busca de dados mais simples com dados básicos (id e nome), e isso pode ser feito. Nós não precisamos expor a senha de um User ao criar um DTO.
Segurança
Economia de Tráfego
Flexibilidade: permite que a API trafegue mais de uma representação dos dados. Ou seja, uma entidade pode ter outros DTOS.
Para preencher um combobox: {id: number, nome: string}
Para um relatório detalhado: {id: number, nome: string, salario: number, email: string, telefones: string[] }
Separação de responsabilidades
Service e repository: transação e monitoramento ORM
Controller: tráfego simples de dados
Na prática:
Veja o DTO criado aqui.
Criaremos um pacote chamado dto
Dentro dele, um ProductDto do tipo Record
Pegaremos os dados básicos que iremos utilizar
Criar construtor (com e sem argumentos)
Gerar Getters. Setters não precisa, pois não faz sentido alterarmos esses dados.
Atualizado