Skip to content

Latest commit

 

History

History
183 lines (140 loc) · 4.79 KB

README.md

File metadata and controls

183 lines (140 loc) · 4.79 KB

Api MyWalletDream

generate Hash

export class UserBusiness {
    constructor(
        private userDatabase: UserDatabase,
        private idGenerator: IdGenerator,
				private tokenManager: TokenManager,
				private hashManager: HashManager
    ) {}
    
    public signup = async (
			input: CreateUserInputDTO
		): Promise<CreateUserOutputDTO> => {
        
				// validações de regra de negócio
				
				// geração da id
        const id = this.idGenerator.generate()

				// hash gerado a partir da senha do body
				const hashedPassword = await this.hashManager.hash(password)

        // imaginando q User tem id, name, email, password e createdAt
        const newUser = new User(
            id,
            input.email,
            hashedPassword, // usamos a senha hasheada em vez da senha plaintext
            new Date().toISOString()
        )

        // continuação da lógica de criação de user (salvando o hash no banco de dados)
    }
}

compare Hash

export class UserBusiness {
  constructor(
    private userDatabase: UserDatabase,
    private idGenerator: IdGenerator,
    private tokenManager: TokenManager,
		private hashManager: HashManager
  ) { }

  public login = async (
    input: LoginInputDTO
  ): Promise<LoginOutputDTO> => {
    const { email, password } = input

    const userDB = await this.userDatabase.findUserByEmail(email)

    if (!userDB) {
      throw new NotFoundError("'email' não encontrado")
    }

    // if (password !== userDB.password) {
    //   throw new BadRequestError("'email' ou 'password' incorretos")
    // }

		// o password hasheado está no banco de dados
		const hashedPassword = userDB.password

		// o serviço hashManager analisa o password do body (plaintext) e o hash
		const isPasswordCorrect = await this.hashManager.compare(password, hashedPassword)

		// validamos o resultado
		if (!isPasswordCorrect) {
      throw new BadRequestError("'email' ou 'password' incorretos")
    }

    const user = new User(
      userDB.id,
      userDB.name,
      userDB.email,
      userDB.password,
      userDB.role,
      userDB.created_at
    )

    const payload: TokenPayload = {
      id: user.getId(),
      name: user.getName(),
      role: user.getRole()
    }

    const token = this.tokenManager.createToken(payload)

    const output: LoginOutputDTO = {
      message: "Login realizado com sucesso",
      token
    }

    return output
  }

	// outros endpoints
}