Bom dia!
Se eu seguir o exemplo apresentado nos vídeos, funciona tudo conforme o esperado.
No entanto, supondo que eu quisesse atribuir um ID à entidade Usuario. Ela seria assim:
export class Usuario {
id: string;
@Expose({ name: 'username' })
@IsString({ message: 'Nome de usuário é obrigatório.' })
nome: string;
@Exclude({ toPlainOnly: true })
@Exclude()
@Expose({ name: 'password' })
@IsNotEmpty({ message: 'senha é obrigatório.' })
senha: string;
@IsLoginUnico({ message: 'Já existe esse login cadastrado.' })
@IsString({ message: 'Login é obrigatório.' })
login: string;
@Expose({ name: 'age' })
@IsNumber(
{ allowNaN: false, maxDecimalPlaces: 0 },
{ message: 'Idade é obrigatória.' },
)
@Min(18, { message: 'Idade mínima deve ser 18 anos.' })
@Max(90, { message: 'Idade máxima deve ser 90 anos.' })
idade: number;
}
No service, ficaria mais ou menos assim o método de criação:
create(usuario: Usuario): Usuario {
const usuarioCriado = {
id: randomUUID(),
...usuario,
} as Usuario;
this.usuarios.push(usuario);
return usuarioCriado;
}
constructor.name
do usuario
é Usuario
; e dousuarioCriado
é object
.
Se eu reotrnar o usuario
, ou seja, o modelo que veio nos argumentos da função, a serialização funciona (são apresentados, somente, os campos age
, username
e login
). Mas se eu retornar o usuarioCriado
(objeto do argumento + id), a serialização não funciona.
Eu entendo o motivo. Na documentação do NestJS isso fica bem claro:
Note that we must return an instance of the class. If you return a plain JavaScript object, for example, { user: new UserEntity() }, the object won't be properly serialized.
Aí eu fiquei na dúvida do motivo do usuarioCriado
não ser do tipo Usuario
.
Mesmo se eu instanciar ele de outra forma, acontece a mesma coisa.
Pq isso acontece?