Files
Censo_api/src/auth/auth.service.ts
T

98 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-10-24 14:37:59 -06:00
import {
BadRequestException,
Injectable,
UnauthorizedException,
InternalServerErrorException,
} from '@nestjs/common';
2025-10-21 14:01:53 -06:00
import { UsuariosService } from 'src/usuarios/usuarios.service';
2025-10-30 10:08:23 -06:00
import * as bcrypt from 'bcryptjs';
2025-10-21 14:01:53 -06:00
import { LoginDto } from './dto/login.dto';
import { CreateUsuarioDto } from 'src/usuarios/dto/create-usuario.dto';
import { JwtService } from '@nestjs/jwt';
2025-11-21 11:51:30 -06:00
import { UpdateUsuarioDto } from 'src/usuarios/dto/update-usuario.dto';
2025-10-21 14:01:53 -06:00
@Injectable()
export class AuthService {
2025-10-24 14:37:59 -06:00
constructor(
private readonly usuarioService: UsuariosService,
private readonly jwtService: JwtService,
) {}
2025-11-28 16:04:44 -06:00
async update(registroDto: UpdateUsuarioDto, id_User: number) {
const update_data = await this.usuarioService.actualizarUsuario(id_User, {
nombre: registroDto.nombre,
contraseñaN: registroDto.contraseñaN,
id_tipo_usuario: registroDto.tipoUsuario,
contraseñaV: registroDto.contraseñaV,
});
2025-11-21 11:51:30 -06:00
return update_data;
}
async findAll() {
return await this.usuarioService.usuarios();
}
2025-10-24 14:37:59 -06:00
async registro({ nombre, contraseña, tipoUsuario }: CreateUsuarioDto) {
const usuario = await this.usuarioService.findOneByName(nombre);
if (usuario) {
throw new BadRequestException('Nombre de usuario ya existente');
2025-10-21 14:01:53 -06:00
}
2025-10-23 14:00:26 -06:00
2025-10-24 14:37:59 -06:00
try {
2025-10-30 10:08:23 -06:00
const salt = await bcrypt.genSalt(10);
const hashedContraseña = await bcrypt.hash(contraseña, salt);
2025-10-21 14:01:53 -06:00
2025-10-24 14:37:59 -06:00
await this.usuarioService.create({
nombre,
contraseña: hashedContraseña,
tipoUsuario,
});
2025-10-23 14:00:26 -06:00
2025-10-24 14:37:59 -06:00
return {
message: 'Usuario registrado exitosamente',
};
} catch (error) {
throw new InternalServerErrorException('Error al crear el usuario');
2025-10-21 14:01:53 -06:00
}
2025-10-24 14:37:59 -06:00
}
2025-10-21 14:01:53 -06:00
2025-11-28 16:04:44 -06:00
async registroMasivo(usuarios: CreateUsuarioDto[]) {
let resultados: string[] = [];
for (const usuario of usuarios) {
const creado = await this.registro(usuario);
resultados.push(creado.message);
}
return resultados;
}
2025-10-24 14:37:59 -06:00
async login({ nombre, contraseña }: LoginDto) {
const usuario = await this.usuarioService.findOneByName(nombre);
if (!usuario) {
throw new UnauthorizedException('Usuario no encontrado');
}
2025-10-21 14:01:53 -06:00
2025-10-30 10:08:23 -06:00
const contraseñaValida = await bcrypt.compare(
2025-10-24 14:37:59 -06:00
contraseña,
2025-10-30 10:08:23 -06:00
usuario.contraseña,
2025-10-24 14:37:59 -06:00
);
2025-10-21 14:01:53 -06:00
2025-10-24 14:37:59 -06:00
if (!contraseñaValida) {
2025-10-30 10:08:23 -06:00
throw new UnauthorizedException('Contraseña inválida');
2025-10-24 14:37:59 -06:00
}
2025-10-30 10:08:23 -06:00
2025-10-24 14:37:59 -06:00
const dataUser = {
id: usuario.id_usuario,
nombre: usuario.nombre,
tipoUsuario: usuario.tipoUsuario.id_tipo_usuario,
};
2025-10-30 10:08:23 -06:00
const token = this.jwtService.sign(dataUser);
2025-10-24 14:37:59 -06:00
return {
2025-10-30 10:08:23 -06:00
token,
2025-10-24 14:37:59 -06:00
};
}
2025-10-21 14:01:53 -06:00
}