2023-02-22 16:28:12 -06:00
|
|
|
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';
|
2023-02-24 15:35:23 -06:00
|
|
|
import { jwtConstants } from './jwt.constants';
|
2023-03-08 15:28:54 -06:00
|
|
|
import { LoginMiembroDto } from './dto/loginMiembro.dto';
|
|
|
|
|
import { Miembro } from 'src/miembro/entity/miembro.entity';
|
|
|
|
|
import { RegistrarMiembroDto } from './dto/registrarMiembro.dto';
|
2023-02-22 16:28:12 -06:00
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class AuthService {
|
|
|
|
|
constructor(
|
|
|
|
|
private jwtService: JwtService,
|
2023-03-08 15:28:54 -06:00
|
|
|
@InjectRepository(Miembro) private miembroRepository: Repository<Miembro>,
|
2023-02-22 16:28:12 -06:00
|
|
|
) {}
|
|
|
|
|
|
2023-03-08 15:28:54 -06:00
|
|
|
async registrar(registrarMiembro: RegistrarMiembroDto) {
|
|
|
|
|
const { email, password } = registrarMiembro;
|
2023-02-22 16:28:12 -06:00
|
|
|
|
2023-03-08 22:07:47 -06:00
|
|
|
if (await this.miembroRepository.findOne({ where: { email } })) {
|
|
|
|
|
throw new HttpException('El usuario ya existe', 403);
|
|
|
|
|
}
|
2023-02-22 16:28:12 -06:00
|
|
|
|
2023-03-08 22:07:47 -06:00
|
|
|
const plainToHash = await hash(password, 10);
|
2023-02-22 16:28:12 -06:00
|
|
|
|
2023-03-08 15:28:54 -06:00
|
|
|
registrarMiembro = { ...registrarMiembro, password: plainToHash };
|
2023-02-22 16:28:12 -06:00
|
|
|
|
2023-03-08 15:28:54 -06:00
|
|
|
return this.miembroRepository.save(
|
|
|
|
|
this.miembroRepository.create(registrarMiembro),
|
2023-02-22 16:28:12 -06:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-08 15:28:54 -06:00
|
|
|
async login(loginMiembro: LoginMiembroDto) {
|
|
|
|
|
const { email, password } = loginMiembro;
|
2023-02-22 16:28:12 -06:00
|
|
|
|
2023-03-08 15:28:54 -06:00
|
|
|
const usuario = await this.miembroRepository.findOne({ where: { email } });
|
2023-03-08 22:07:47 -06:00
|
|
|
|
2023-02-22 16:28:12 -06:00
|
|
|
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);
|
|
|
|
|
|
2023-03-08 22:07:47 -06:00
|
|
|
const payload = {
|
|
|
|
|
id_usuario: usuario.id_miembro,
|
|
|
|
|
id_tipoMiembro: usuario.id_tipo_miembro,
|
|
|
|
|
name: usuario.nombre,
|
|
|
|
|
};
|
2023-03-09 10:18:14 -06:00
|
|
|
/* console.log(payload); */
|
2023-02-22 16:28:12 -06:00
|
|
|
const token = this.jwtService.sign(payload); //firma el token
|
2023-03-09 10:18:14 -06:00
|
|
|
/* console.log(token); */
|
2023-02-22 16:28:12 -06:00
|
|
|
|
|
|
|
|
const data = {
|
2023-06-26 08:33:18 -06:00
|
|
|
user: {
|
|
|
|
|
usuario: usuario.nombre,
|
|
|
|
|
id: usuario.id_miembro,
|
|
|
|
|
email: usuario.email,
|
|
|
|
|
},
|
2023-02-22 16:28:12 -06:00
|
|
|
token,
|
|
|
|
|
};
|
|
|
|
|
|
2023-03-08 22:07:47 -06:00
|
|
|
return data;
|
2023-02-22 16:28:12 -06:00
|
|
|
}
|
|
|
|
|
}
|