Files
Censo_api/src/auth/auth.service.ts
T
2025-10-24 10:41:40 -06:00

73 lines
2.1 KiB
TypeScript

import { BadRequestException, Injectable, UnauthorizedException, InternalServerErrorException } from '@nestjs/common';
import { UsuariosService } from 'src/usuarios/usuarios.service';
import * as argon2 from 'argon2';
import { LoginDto } from './dto/login.dto';
import { CreateUsuarioDto } from 'src/usuarios/dto/create-usuario.dto';
import { JwtService } from '@nestjs/jwt';
import { Repository } from 'typeorm';
import { Usuario } from 'src/usuarios/entities/usuario.entity';
import { InjectRepository } from '@nestjs/typeorm';
@Injectable()
export class AuthService {
constructor(
private readonly usuarioService:UsuariosService,
private readonly jwtService:JwtService
){}
//Pendiente tipoUsuario
async registro({nombre, contraseña,tipoUsuario}: CreateUsuarioDto){
const usuario = await this.usuarioService.findOneByName(nombre);
if(usuario){
throw new BadRequestException("Nombre de usuario ya existente");
}
try{
const hashedContraseña = await argon2.hash(contraseña);
await this.usuarioService.create({
nombre,
contraseña: hashedContraseña,
tipoUsuario,
});
return {
message: "Usuario registrado exitosamente"
};
}catch(error){
throw new InternalServerErrorException('Error al crear el usuario');
}
}
async login({nombre, contraseña}:LoginDto){
const usuario= await this.usuarioService.findOneByName(nombre)
if(!usuario){
throw new UnauthorizedException("Usuario no encontrado");
}
const contraseñaValida= await argon2.verify(contraseña, usuario.contraseña);
if(!contraseñaValida){
throw new UnauthorizedException("Contraseña invalida");
}
const dataUser={
id:usuario.id_usuario,
nombre:usuario.nombre,
tipoUsuario:usuario.tipoUsuario.id_tipo_usuario
}
const token=await this.jwtService.sign(dataUser)
return{
token:token,
};
}
}