Files
cedetec_api_nest/src/auth/auth.service.ts
T
2023-06-26 08:33:18 -06:00

68 lines
2.0 KiB
TypeScript

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<Miembro>,
) {}
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;
}
}