1
resposta

[Dúvida] Erro ao validar email com decorator criado

https://github.com/DanLoose/loja

Quando efetuo dois cadastros com o mesmo email, nenhum erro é disparado e o usuário é cadastrado do mesmo jeito. Uma coisa que notei ser muito estranha é que meu método "existeEmail" dentro do usuario.repository SEMPRE retorna false, mesmo que o usuario de fato exista. Acredito que "this.usuarios.find()" não está fazendo a validação correta, mas pelo que notei, o código está exatamente igual ao do professor.

import { Injectable } from "@nestjs/common";
import { CriaUsuarioDTO } from "./dto/CriaUsuario.dto";

@Injectable()
export class UsuarioRepository {
    private usuarios = [];

    async salvar(usuario: CriaUsuarioDTO) {
        this.usuarios.push(usuario);
    }

    async listar() {
        return this.usuarios;
    }

    async existeEmail(email: string) {
        const possivelUsuario = this.usuarios.find(
            usuario => usuario.email === email
        )

        return possivelUsuario !== undefined;
    }
}
1 resposta

Olá, Danilo! Tudo bem?

Pelo que pude entender do seu código, acredito que o problema esteja no método "existeEmail" do seu repositório. Como você mencionou, o método sempre retorna false, mesmo que o usuário já exista. Isso pode estar acontecendo porque a comparação que você está fazendo no método "find" não está sendo feita corretamente.

Uma sugestão de solução seria utilizar o método "some" ao invés de "find". O método "some" retorna true se pelo menos um elemento do array satisfaz a condição passada como parâmetro. Ficaria assim:

async existeEmail(email: string) {
    return this.usuarios.some(usuario => usuario.email === email);
}

Dessa forma, o método irá retornar true se encontrar um usuário com o mesmo email, e false caso contrário.

Espero ter ajudado e bons estudos!