diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index 6c7c708..924c0b2 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -13,7 +13,8 @@ import { LineasInvestigacion } from '../lineas_investigacion/entities/lineas_inv @Injectable() export class ProfesorService { constructor( - @InjectRepository(Profesor) private profesorRepository: Repository, + @InjectRepository(Profesor) + private profesorRepository: Repository, private datosAcademicosService: DatosAcademicosService, private lineasInvestigacionService: LineasInvestigacionService, private proyectosAcademicosService: ProyectosAcademicosService, @@ -150,10 +151,18 @@ export class ProfesorService { throw new HttpException('Profesor not found', 404); } - // Delete related records in datos_academicos - await this.datosAcademicosService.removeByProfesorId(id_profesor); - await this.lineasInvestigacionService.removeByProfesorId(id_profesor); - await this.proyectosAcademicosService.removeByProfesorId(id_profesor); + // Delete related records if corresponding services are available + if (this.datosAcademicosService) { + await this.datosAcademicosService.removeByProfesorId(id_profesor); + } + + if (this.lineasInvestigacionService) { + await this.lineasInvestigacionService.removeByProfesorId(id_profesor); + } + + if (this.proyectosAcademicosService) { + await this.proyectosAcademicosService.removeByProfesorId(id_profesor); + } await this.profesorRepository.remove(profesor); return { message: 'Profesor removed successfully' }; diff --git a/src/app.module.ts b/src/app.module.ts index 33dc4dd..0ff97fb 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -19,6 +19,9 @@ import { Profesor } from './Profesor/entities/profesor.entity'; import { AdscripcionModule } from "./adscripcion/adscripcion.module"; import { EdificioModule } from "./edificio/edificio.module"; import { CategoriaModule } from "./categoria/categoria.module"; +import { DatosAcademicosModule } from './datos_academicos/datos_academicos.module'; +import { LineasInvestigacionModule } from './lineas_investigacion/lineas_investigacion.module'; +import { ProyectosAcademicosModule } from './proyectos_academicos/proyectos_academicos.module'; @Module({ imports: [ @@ -53,6 +56,9 @@ import { CategoriaModule } from "./categoria/categoria.module"; }), }), ProfesorModule, + DatosAcademicosModule, + LineasInvestigacionModule, + ProyectosAcademicosModule, AdscripcionModule, EdificioModule, CategoriaModule, diff --git a/src/datos_academicos/datos_academicos.module.ts b/src/datos_academicos/datos_academicos.module.ts index 5505237..bd3ae65 100644 --- a/src/datos_academicos/datos_academicos.module.ts +++ b/src/datos_academicos/datos_academicos.module.ts @@ -1,11 +1,13 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { DatosAcademicos } from './entities/datos_academicos.entity'; import { DatosAcademicosService } from './datos_academicos.service'; +import { DatosAcademicosController } from './datos_academicos.controller'; +import { DatosAcademicos } from './entities/datos_academicos.entity'; @Module({ imports: [TypeOrmModule.forFeature([DatosAcademicos])], providers: [DatosAcademicosService], + controllers: [DatosAcademicosController], exports: [DatosAcademicosService], }) export class DatosAcademicosModule {} diff --git a/src/permissions/role.enum.ts b/src/permissions/role.enum.ts index a6ac7e4..b8c9461 100644 --- a/src/permissions/role.enum.ts +++ b/src/permissions/role.enum.ts @@ -1,5 +1,5 @@ export enum Role { - Admin = '1', - Responsable = '2', + Admin = 1, + Responsable = 2, } \ No newline at end of file diff --git a/src/permissions/roles.guard.ts b/src/permissions/roles.guard.ts index 94ce84d..aa766ec 100644 --- a/src/permissions/roles.guard.ts +++ b/src/permissions/roles.guard.ts @@ -3,10 +3,15 @@ import { Reflector } from '@nestjs/core'; import { JwtService } from '@nestjs/jwt'; import { Role } from './role.enum'; import { ROLES_KEY } from './roles.decorator'; +import { ConfigService } from '@nestjs/config'; @Injectable() export class RolesGuard implements CanActivate { - constructor(private reflector: Reflector, private jwtService: JwtService) {} + constructor( + private reflector: Reflector, + private jwtService: JwtService, + private configService: ConfigService + ) {} async canActivate(context: ExecutionContext): Promise { const requiredRoles = this.reflector.getAllAndOverride(ROLES_KEY, [ @@ -30,20 +35,22 @@ export class RolesGuard implements CanActivate { throw new UnauthorizedException('No token provided'); } - let userPayload; try { - userPayload = this.jwtService.verify(token); + const userPayload = await this.jwtService.verifyAsync( + token, + { + secret: this.configService.get('JWT_SECRET'), + } + ); + + const userRole: Role = userPayload.id_tipo_usuario; + if (userRole === undefined) { + return false; // Si el token no contiene roles, se niega el acceso + } + + return requiredRoles.includes(userRole); } catch (error) { throw new UnauthorizedException('Invalid token'); } - - const userRoles: Role[] = userPayload.id_tipo_usuario; - if (!userRoles) { - return false; // Si el token no contiene roles, se niega el acceso - } - - return requiredRoles.some(role => userRoles.includes(role)); - } catch (err) { - return false; // Manejar errores de verificación de token, aquí puedes personalizar la lógica según necesites - } } +} diff --git a/src/users/dto/userDto.dto.ts b/src/users/dto/userDto.dto.ts index 81a5527..b54fb0c 100644 --- a/src/users/dto/userDto.dto.ts +++ b/src/users/dto/userDto.dto.ts @@ -4,17 +4,21 @@ export class UserDto{ @IsString() @IsNotEmpty() usuario: string; - + + @IsString() + @IsNotEmpty() + nombre: string; + @IsString() @IsNotEmpty() contraseña: string; - - @IsNumber() + + @IsString() @IsNotEmpty() - id_tipo_usuario:number; + id_tipo_usuario:string; @IsString() @IsNotEmpty() correo: string; - + } \ No newline at end of file