import { HttpException, Injectable } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import * as bcrypt from 'bcrypt'; import { hash } from 'bcrypt'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { compare } from 'bcrypt'; import { jwtConstants } from './jwt.constants'; import { LoginMiembroDto } from './dto/loginMiembro.dto'; import { Miembro } from 'src/miembro/entity/miembro.entity'; import { RegistrarMiembroDto } from './dto/registrarMiembro.dto'; @Injectable() export class AuthService { constructor( private jwtService: JwtService, @InjectRepository(Miembro) private miembroRepository: Repository, ) {} async registrar(registrarMiembro: RegistrarMiembroDto) { const { email, password } = registrarMiembro; if (await this.miembroRepository.findOne({ where: { email } })) { throw new HttpException('El usuario ya existe', 403); } const plainToHash = await hash(password, 10); registrarMiembro = { ...registrarMiembro, password: plainToHash }; return this.miembroRepository.save( this.miembroRepository.create(registrarMiembro), ); } async login(loginMiembro: LoginMiembroDto) { const { email, password } = loginMiembro; const usuario = await this.miembroRepository.findOne({ where: { email } }); if (!usuario) throw new HttpException('Usuario no encontrado', 404); const checkPassword = await compare(password, (await usuario).password); if (!checkPassword) throw new HttpException('ContraseƱa incorrecta', 403); const payload = { id_usuario: usuario.id_miembro, id_tipoMiembro: usuario.id_tipo_miembro, name: usuario.nombre, }; /* console.log(payload); */ const token = this.jwtService.sign(payload); //firma el token /* console.log(token); */ const data = { user: { usuario: usuario.nombre, id: usuario.id_miembro, email: usuario.email, }, token, }; return data; } }