From 81dfbe4910c3787d76aceac7e4ba6c19aff51b57 Mon Sep 17 00:00:00 2001 From: IO Date: Thu, 25 Jul 2024 16:41:23 -0600 Subject: [PATCH 1/8] deveelopment --- src/Profesor/dto/profesorDto.dto.ts | 4 ++-- src/Profesor/entities/profesor.entity.ts | 4 ++-- .../entities/lineas_investigacion.entity.ts | 3 --- .../entities/proyectos_academicos.entity.ts | 3 --- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Profesor/dto/profesorDto.dto.ts b/src/Profesor/dto/profesorDto.dto.ts index 432d890..c62ecdc 100644 --- a/src/Profesor/dto/profesorDto.dto.ts +++ b/src/Profesor/dto/profesorDto.dto.ts @@ -99,7 +99,7 @@ export class ProyectosAcademicos { @IsOptional() @Length(0, 500) - proyecto: string; + proyecto_html: string; } export class DatosAcademicos{ @@ -117,5 +117,5 @@ export class LineasInvestigacion{ @IsOptional() @Length(0,300) - lineas_inv: string; + lineas_inv_html: string; } \ No newline at end of file diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index a18cb49..97e6292 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -1,6 +1,6 @@ import { Entity, - PrimaryGeneratedColumn, + PrimaryColumn, Column, ManyToOne, OneToMany, @@ -16,7 +16,7 @@ import { User } from 'src/users/entities/user.entity'; @Entity() export class Profesor { - @PrimaryGeneratedColumn() + @PrimaryColumn() id_profesor: number; @Column({ type: 'int',nullable: false }) diff --git a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts index 7e713e7..4f71dbf 100644 --- a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts +++ b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts @@ -10,9 +10,6 @@ export class LineasInvestigacion { @Column({ type: 'int', nullable: false }) id_profesor: number; - @Column({ type: 'varchar', length: 300, nullable: true }) - lineas_inv: string; - @Column({ type: 'varchar', length: 350, nullable: true }) lineas_inv_html: string; diff --git a/src/proyectos_academicos/entities/proyectos_academicos.entity.ts b/src/proyectos_academicos/entities/proyectos_academicos.entity.ts index c69ca57..75837e8 100644 --- a/src/proyectos_academicos/entities/proyectos_academicos.entity.ts +++ b/src/proyectos_academicos/entities/proyectos_academicos.entity.ts @@ -10,9 +10,6 @@ export class ProyectosAcademicos { @Column({ type: 'int', nullable: false }) id_profesor: number; - @Column({ type: 'varchar', length: 500, nullable: true }) - proyecto: string; - @Column({ type: 'varchar', length: 700, nullable: true }) proyecto_html: string; From 63f3f7f44321ce6fbc0f54257690b91d6fcf131f Mon Sep 17 00:00:00 2001 From: IO Date: Fri, 26 Jul 2024 18:24:17 -0600 Subject: [PATCH 2/8] Teacher Modification --- src/Profesor/dto/profesorDto.dto.ts | 3 +++ src/Profesor/entities/profesor.entity.ts | 12 ++++++------ src/Profesor/profesor.service.ts | 16 ++++++++++++++++ .../entities/datos_academicos.entity.ts | 2 +- .../entities/lineas_investigacion.entity.ts | 2 +- .../entities/proyectos_academicos.entity.ts | 2 +- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/Profesor/dto/profesorDto.dto.ts b/src/Profesor/dto/profesorDto.dto.ts index c62ecdc..e4d3b2f 100644 --- a/src/Profesor/dto/profesorDto.dto.ts +++ b/src/Profesor/dto/profesorDto.dto.ts @@ -2,6 +2,9 @@ import { Type } from "class-transformer"; import { IsBoolean, IsInt, IsNotEmpty, IsNumber, IsString, IsOptional, Length, ValidateNested} from "class-validator"; export class profesorDto{ + + @IsInt() + id_profesor: number; @IsInt() @IsNotEmpty() diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index 97e6292..2a997b8 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -16,10 +16,10 @@ import { User } from 'src/users/entities/user.entity'; @Entity() export class Profesor { - @PrimaryColumn() + @PrimaryColumn({ type: 'int', nullable: false }) id_profesor: number; - @Column({ type: 'int',nullable: false }) + @Column({ type: 'int', nullable: false }) id_usuario: number; @Column({ type: 'varchar', length: 10, nullable: true }) @@ -86,19 +86,19 @@ export class Profesor { fecha_actualizacion: Date; @ManyToOne(() => Edificio, edificio => edificio.profesores) - @JoinColumn({ name: 'id_edificio' }) + @JoinColumn({ name: 'id_edificio', referencedColumnName: 'id_edificio', foreignKeyConstraintName: 'FK_edificio' }) edificio: Edificio; @ManyToOne(() => Adscripcion, adscripcion => adscripcion.profesores) - @JoinColumn({ name: 'id_adscripcion' }) + @JoinColumn({ name: 'id_adscripcion', referencedColumnName: 'id_adscripcion', foreignKeyConstraintName: 'FK_adscripcion' }) adscripcion: Adscripcion; @ManyToOne(() => Categoria, categoria => categoria.profesores) - @JoinColumn({ name: 'id_categoria' }) + @JoinColumn({ name: 'id_categoria', referencedColumnName: 'id_categoria', foreignKeyConstraintName: 'FK_categoria' }) categoria: Categoria; @ManyToOne(() => User, user => user.profesores) - @JoinColumn({ name: 'id_usuario' }) + @JoinColumn({ name: 'id_usuario', referencedColumnName: 'id_usuario', foreignKeyConstraintName: 'FK_usuario' }) user: User; @OneToMany(() => DatosAcademicos, datosAcademicos => datosAcademicos.profesor,{ cascade: true }) diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index 0930789..a5b1d04 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -26,6 +26,19 @@ export class ProfesorService { private readonly proyectosAcademicosRepository: Repository, ) {} + private async findAvailableId(): Promise { + let id = 1; + let exists = true; + + while (exists) { + if (!await this.profesorRepository.findOne({ where: { id_profesor: id } })) { + exists = false; + return id; + } + id++; + } + } + //register teacher async register(data: profesorDto): Promise { const { num_trabajador, rfc, proyectosAcademicos, datosAcademicos, lineasInvestigacion} = data; @@ -38,6 +51,9 @@ export class ProfesorService { throw new HttpException('number of worker already exist', 403); } + const availableId = await this.findAvailableId(); + data.id_profesor = availableId; + const savedProfesor = await this.profesorRepository.save(data); if (proyectosAcademicos && proyectosAcademicos.length > 0) { diff --git a/src/datos_academicos/entities/datos_academicos.entity.ts b/src/datos_academicos/entities/datos_academicos.entity.ts index 5d5f3bb..7bf8688 100644 --- a/src/datos_academicos/entities/datos_academicos.entity.ts +++ b/src/datos_academicos/entities/datos_academicos.entity.ts @@ -16,6 +16,6 @@ export class DatosAcademicos { grados_obtenidos: string; @ManyToOne(() => Profesor, (profesor) => profesor.datosAcademicos) - @JoinColumn({ name: 'id_profesor' }) + @JoinColumn({ name: 'id_profesor', referencedColumnName: 'id_profesor', foreignKeyConstraintName: 'FK_datos_academicos' }) profesor: Profesor; } diff --git a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts index 4f71dbf..80d5cfa 100644 --- a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts +++ b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts @@ -14,6 +14,6 @@ export class LineasInvestigacion { lineas_inv_html: string; @ManyToOne(() => Profesor, profesor => profesor.lineasInvestigacion) - @JoinColumn({ name: 'id_profesor' }) + @JoinColumn({ name: 'id_profesor', referencedColumnName: 'id_profesor', foreignKeyConstraintName: 'FK_lineas_investigacion' }) profesor: Profesor; } diff --git a/src/proyectos_academicos/entities/proyectos_academicos.entity.ts b/src/proyectos_academicos/entities/proyectos_academicos.entity.ts index 75837e8..232dd83 100644 --- a/src/proyectos_academicos/entities/proyectos_academicos.entity.ts +++ b/src/proyectos_academicos/entities/proyectos_academicos.entity.ts @@ -14,6 +14,6 @@ export class ProyectosAcademicos { proyecto_html: string; @ManyToOne(() => Profesor, profesor => profesor.proyectosAcademicos) - @JoinColumn({ name: 'id_profesor' }) + @JoinColumn({ name: 'id_profesor', referencedColumnName: 'id_profesor', foreignKeyConstraintName: 'FK_proyectos_academicos' }) profesor: Profesor; } From 39c37faafc01373693b4226f525dbac43dad7750 Mon Sep 17 00:00:00 2001 From: IO Date: Fri, 26 Jul 2024 23:25:46 -0600 Subject: [PATCH 3/8] fk --- src/users/entities/user.entity.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/users/entities/user.entity.ts b/src/users/entities/user.entity.ts index 58ee8f5..9927747 100644 --- a/src/users/entities/user.entity.ts +++ b/src/users/entities/user.entity.ts @@ -33,9 +33,9 @@ export class User { lastlog: Date; @ManyToOne(() => TipoUsuario, tipoUsuario => tipoUsuario.users) - @JoinColumn({ name: 'id_tipo_usuario' }) + @JoinColumn({ name: 'id_tipo_usuario', referencedColumnName: 'id_tipo_usuario', foreignKeyConstraintName: 'FK_tipo_usuario' }) tipoUsuario: TipoUsuario; @OneToMany(() => Profesor, profesor => profesor.user) profesores: Profesor[]; -} +} \ No newline at end of file From 10c415cdd4bcd6f207dcee75ff6b6fb8db436770 Mon Sep 17 00:00:00 2001 From: IO Date: Sat, 27 Jul 2024 00:11:39 -0600 Subject: [PATCH 4/8] fixed table issues --- src/Profesor/entities/profesor.entity.ts | 12 +++++++----- src/adscripcion/entities/adscripcion.entity.ts | 5 +++-- src/categoria/entities/categoria.entity.ts | 7 ++++--- .../entities/datos_academicos.entity.ts | 2 +- src/edificio/entities/edificio.entity.ts | 5 +++-- .../entities/lineas_investigacion.entity.ts | 2 +- .../entities/proyectos_academicos.entity.ts | 2 +- src/tipo_usuario/entities/tipo_usuario.entity.ts | 2 +- src/users/entities/user.entity.ts | 2 +- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index 2a997b8..fcdef89 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -5,6 +5,7 @@ import { ManyToOne, OneToMany, JoinColumn, + Index, } from 'typeorm'; import { Edificio } from '../../edificio/entities/edificio.entity'; import { Adscripcion } from '../../adscripcion/entities/adscripcion.entity'; @@ -14,7 +15,8 @@ import { LineasInvestigacion } from '../../lineas_investigacion/entities/lineas_ import { ProyectosAcademicos } from '../../proyectos_academicos/entities/proyectos_academicos.entity'; import { User } from 'src/users/entities/user.entity'; -@Entity() +@Entity({ name: 'profesor' }) +@Index('PK_profesor', ['id_profesor'], { unique: true }) export class Profesor { @PrimaryColumn({ type: 'int', nullable: false }) id_profesor: number; @@ -86,19 +88,19 @@ export class Profesor { fecha_actualizacion: Date; @ManyToOne(() => Edificio, edificio => edificio.profesores) - @JoinColumn({ name: 'id_edificio', referencedColumnName: 'id_edificio', foreignKeyConstraintName: 'FK_edificio' }) + @JoinColumn({ name: 'id_edificio', referencedColumnName: 'id_edificio', foreignKeyConstraintName: 'FK_edificio_fk' }) edificio: Edificio; @ManyToOne(() => Adscripcion, adscripcion => adscripcion.profesores) - @JoinColumn({ name: 'id_adscripcion', referencedColumnName: 'id_adscripcion', foreignKeyConstraintName: 'FK_adscripcion' }) + @JoinColumn({ name: 'id_adscripcion', referencedColumnName: 'id_adscripcion', foreignKeyConstraintName: 'FK_adscripcion_fk' }) adscripcion: Adscripcion; @ManyToOne(() => Categoria, categoria => categoria.profesores) - @JoinColumn({ name: 'id_categoria', referencedColumnName: 'id_categoria', foreignKeyConstraintName: 'FK_categoria' }) + @JoinColumn({ name: 'id_categoria', referencedColumnName: 'id_categoria', foreignKeyConstraintName: 'FK_categoria_fk' }) categoria: Categoria; @ManyToOne(() => User, user => user.profesores) - @JoinColumn({ name: 'id_usuario', referencedColumnName: 'id_usuario', foreignKeyConstraintName: 'FK_usuario' }) + @JoinColumn({ name: 'id_usuario', referencedColumnName: 'id_usuario', foreignKeyConstraintName: 'FK_usuario_fk' }) user: User; @OneToMany(() => DatosAcademicos, datosAcademicos => datosAcademicos.profesor,{ cascade: true }) diff --git a/src/adscripcion/entities/adscripcion.entity.ts b/src/adscripcion/entities/adscripcion.entity.ts index 5fa56ff..5f5361d 100644 --- a/src/adscripcion/entities/adscripcion.entity.ts +++ b/src/adscripcion/entities/adscripcion.entity.ts @@ -1,6 +1,7 @@ -import { Entity, PrimaryColumn, Column, OneToMany } from 'typeorm'; +import { Entity, PrimaryColumn, Column, OneToMany, Index } from 'typeorm'; -@Entity() +@Entity({ name: 'adscripcion' }) +@Index('PK_adscripcion', ['id_adscripcion'], { unique: true }) export class Adscripcion { @PrimaryColumn({ type: 'int', nullable: false }) id_adscripcion: number; diff --git a/src/categoria/entities/categoria.entity.ts b/src/categoria/entities/categoria.entity.ts index 0d110e9..50cd771 100644 --- a/src/categoria/entities/categoria.entity.ts +++ b/src/categoria/entities/categoria.entity.ts @@ -1,6 +1,7 @@ -import { Entity, PrimaryColumn, Column, OneToMany } from 'typeorm'; +import { Entity, PrimaryColumn, Column, OneToMany, Index } from 'typeorm'; -@Entity() +@Entity({ name: 'categoria' }) +@Index('PK_categoria', ['id_categoria'], { unique: true }) export class Categoria { @PrimaryColumn({ type: 'int', nullable: false }) id_categoria: number; @@ -10,4 +11,4 @@ export class Categoria { @OneToMany(() => Categoria, (categoria) => categoria.profesores) profesores: Categoria[]; -} +} \ No newline at end of file diff --git a/src/datos_academicos/entities/datos_academicos.entity.ts b/src/datos_academicos/entities/datos_academicos.entity.ts index 7bf8688..903b18f 100644 --- a/src/datos_academicos/entities/datos_academicos.entity.ts +++ b/src/datos_academicos/entities/datos_academicos.entity.ts @@ -3,7 +3,7 @@ import { Profesor } from '../../Profesor/entities/profesor.entity'; @Entity({ name: 'datos_academicos' }) export class DatosAcademicos { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn({ name: 'PK_datos_academicos' }) id_datos: number; @Column({ type: 'int', nullable: false }) diff --git a/src/edificio/entities/edificio.entity.ts b/src/edificio/entities/edificio.entity.ts index 0619d94..041f8f1 100644 --- a/src/edificio/entities/edificio.entity.ts +++ b/src/edificio/entities/edificio.entity.ts @@ -1,6 +1,7 @@ -import { Entity, PrimaryColumn, Column, OneToMany } from 'typeorm'; +import { Entity, PrimaryColumn, Column, OneToMany, Index } from 'typeorm'; -@Entity() +@Entity({ name: 'edificio' }) +@Index('PK_edificio', ['id_edificio'], { unique: true }) export class Edificio { @PrimaryColumn({ type: 'int', nullable: false }) id_edificio: number; diff --git a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts index 80d5cfa..e99af62 100644 --- a/src/lineas_investigacion/entities/lineas_investigacion.entity.ts +++ b/src/lineas_investigacion/entities/lineas_investigacion.entity.ts @@ -4,7 +4,7 @@ import { Profesor } from "../../Profesor/entities/profesor.entity"; @Entity({ name: 'lineas_investigacion' }) export class LineasInvestigacion { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn({ name: 'PK_lineas_investigacion' }) id_linea_inv: number; @Column({ type: 'int', nullable: false }) diff --git a/src/proyectos_academicos/entities/proyectos_academicos.entity.ts b/src/proyectos_academicos/entities/proyectos_academicos.entity.ts index 232dd83..352753f 100644 --- a/src/proyectos_academicos/entities/proyectos_academicos.entity.ts +++ b/src/proyectos_academicos/entities/proyectos_academicos.entity.ts @@ -4,7 +4,7 @@ import { Profesor } from "../../Profesor/entities/profesor.entity"; @Entity({ name: 'proyectos_academicos' }) export class ProyectosAcademicos { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn({ name: 'PK_proyectos_academicos' }) id_proyecto: number; @Column({ type: 'int', nullable: false }) diff --git a/src/tipo_usuario/entities/tipo_usuario.entity.ts b/src/tipo_usuario/entities/tipo_usuario.entity.ts index 5da6153..523bb86 100644 --- a/src/tipo_usuario/entities/tipo_usuario.entity.ts +++ b/src/tipo_usuario/entities/tipo_usuario.entity.ts @@ -3,7 +3,7 @@ import { User } from '../../users/entities/user.entity'; @Entity({ name: 'tipo_usuario' }) export class TipoUsuario { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn({ name: 'PK_tipo_usuario' }) id_tipo_usuario: number; @Column({ type: 'varchar', length: 30, nullable: false }) diff --git a/src/users/entities/user.entity.ts b/src/users/entities/user.entity.ts index 9927747..68b5532 100644 --- a/src/users/entities/user.entity.ts +++ b/src/users/entities/user.entity.ts @@ -5,7 +5,7 @@ import { Profesor } from 'src/Profesor/entities/profesor.entity'; @Entity({ name: 'usuario' }) export class User { - @PrimaryGeneratedColumn() + @PrimaryGeneratedColumn({ name: 'PK_usuario' }) id_usuario: number; @Column({ type: 'int', nullable: false }) From e52a90b72518c0b39c29727202d0903ff9f52a30 Mon Sep 17 00:00:00 2001 From: IO Date: Sat, 27 Jul 2024 17:17:58 -0600 Subject: [PATCH 5/8] id --- src/Profesor/entities/profesor.entity.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index fcdef89..0df061c 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -18,7 +18,7 @@ import { User } from 'src/users/entities/user.entity'; @Entity({ name: 'profesor' }) @Index('PK_profesor', ['id_profesor'], { unique: true }) export class Profesor { - @PrimaryColumn({ type: 'int', nullable: false }) + @PrimaryColumn({name:'id_profesor', type: 'int', nullable: false }) id_profesor: number; @Column({ type: 'int', nullable: false }) From 896631ef5e061607571450809fad0d2b07149f53 Mon Sep 17 00:00:00 2001 From: IO Date: Sat, 27 Jul 2024 17:31:44 -0600 Subject: [PATCH 6/8] pk remove --- src/Profesor/entities/profesor.entity.ts | 3 +-- src/adscripcion/entities/adscripcion.entity.ts | 1 - src/categoria/entities/categoria.entity.ts | 1 - src/edificio/entities/edificio.entity.ts | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index 0df061c..c859dc0 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -16,9 +16,8 @@ import { ProyectosAcademicos } from '../../proyectos_academicos/entities/proyect import { User } from 'src/users/entities/user.entity'; @Entity({ name: 'profesor' }) -@Index('PK_profesor', ['id_profesor'], { unique: true }) export class Profesor { - @PrimaryColumn({name:'id_profesor', type: 'int', nullable: false }) + @PrimaryColumn({ type: 'int', nullable: false }) id_profesor: number; @Column({ type: 'int', nullable: false }) diff --git a/src/adscripcion/entities/adscripcion.entity.ts b/src/adscripcion/entities/adscripcion.entity.ts index 5f5361d..8610472 100644 --- a/src/adscripcion/entities/adscripcion.entity.ts +++ b/src/adscripcion/entities/adscripcion.entity.ts @@ -1,7 +1,6 @@ import { Entity, PrimaryColumn, Column, OneToMany, Index } from 'typeorm'; @Entity({ name: 'adscripcion' }) -@Index('PK_adscripcion', ['id_adscripcion'], { unique: true }) export class Adscripcion { @PrimaryColumn({ type: 'int', nullable: false }) id_adscripcion: number; diff --git a/src/categoria/entities/categoria.entity.ts b/src/categoria/entities/categoria.entity.ts index 50cd771..1c20884 100644 --- a/src/categoria/entities/categoria.entity.ts +++ b/src/categoria/entities/categoria.entity.ts @@ -1,7 +1,6 @@ import { Entity, PrimaryColumn, Column, OneToMany, Index } from 'typeorm'; @Entity({ name: 'categoria' }) -@Index('PK_categoria', ['id_categoria'], { unique: true }) export class Categoria { @PrimaryColumn({ type: 'int', nullable: false }) id_categoria: number; diff --git a/src/edificio/entities/edificio.entity.ts b/src/edificio/entities/edificio.entity.ts index 041f8f1..3092006 100644 --- a/src/edificio/entities/edificio.entity.ts +++ b/src/edificio/entities/edificio.entity.ts @@ -1,7 +1,6 @@ import { Entity, PrimaryColumn, Column, OneToMany, Index } from 'typeorm'; @Entity({ name: 'edificio' }) -@Index('PK_edificio', ['id_edificio'], { unique: true }) export class Edificio { @PrimaryColumn({ type: 'int', nullable: false }) id_edificio: number; From 28aba967b175a7bbf4a47bd0edc9c86313d75172 Mon Sep 17 00:00:00 2001 From: IO Date: Sat, 27 Jul 2024 21:03:38 -0600 Subject: [PATCH 7/8] fixed update user --- src/app.service.ts | 2 +- src/auth/auth.service.ts | 17 +++++++++++------ src/permissions/roles.guard.ts | 9 ++++++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/app.service.ts b/src/app.service.ts index 548dd8c..f6d00f9 100644 --- a/src/app.service.ts +++ b/src/app.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; @Injectable() export class AppService { getHello(): string { - console.log("it's ok ") + console.log("it's ok IO") return "hei verden"; } diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index fe1d45c..ab39039 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -73,13 +73,18 @@ export class AuthService { } //update user - async update(id_usuario, data:registerDto) { + async update(id_usuario: number, data: registerDto) { + const { contraseña } = data; - const{contraseña}=data; - - if(contraseña){ + if (contraseña) { const hashedpassword = await hash(contraseña, 10); - data = {...data,contraseña:hashedpassword}; + data = { ...data, contraseña: hashedpassword }; + } else { + const user = await this.userRepository.findOne({ where: { id_usuario } }); + if (!user) { + throw new HttpException('User not found', 404); + } + data = { ...data, contraseña: user.contraseña }; } return await this.userRepository.update(id_usuario, data); @@ -108,7 +113,7 @@ export class AuthService { throw new UnauthorizedException('Token has expired'); } - return user; + return ; } catch (error) { throw new UnauthorizedException('validation token failed'); } diff --git a/src/permissions/roles.guard.ts b/src/permissions/roles.guard.ts index aa766ec..9671a16 100644 --- a/src/permissions/roles.guard.ts +++ b/src/permissions/roles.guard.ts @@ -44,11 +44,14 @@ export class RolesGuard implements CanActivate { ); const userRole: Role = userPayload.id_tipo_usuario; - if (userRole === undefined) { - return false; // Si el token no contiene roles, se niega el acceso + const userId: number = userPayload.id_usuario; + + const paramId = parseInt(request.params.id_usuario, 10); + if (requiredRoles.includes(userRole) || userId === paramId) { + return true; } - return requiredRoles.includes(userRole); + return false; } catch (error) { throw new UnauthorizedException('Invalid token'); } From 61ffbc195b4bb787d28cec76c8dc58cb62899b1e Mon Sep 17 00:00:00 2001 From: TheManus88 Date: Mon, 29 Jul 2024 19:18:06 -0600 Subject: [PATCH 8/8] log into professors --- src/Profesor/profesor.controller.ts | 71 +++++++++++----- src/Profesor/profesor.service.ts | 125 +++++++++++++++------------- 2 files changed, 117 insertions(+), 79 deletions(-) diff --git a/src/Profesor/profesor.controller.ts b/src/Profesor/profesor.controller.ts index 2e2e763..5943759 100644 --- a/src/Profesor/profesor.controller.ts +++ b/src/Profesor/profesor.controller.ts @@ -1,48 +1,75 @@ -import { Body, Controller, Delete, Get, Param, ParseIntPipe, Post, Put, Query,UseGuards } from '@nestjs/common'; -import { ProfesorService } from './profesor.service'; -import { profesorDto } from './dto/profesorDto.dto'; -import {Roles} from '../permissions/roles.decorator' -import {RolesGuard} from '../permissions/roles.guard' -import {Role} from '../permissions/role.enum' +import { + Body, + Controller, + Delete, + Get, + Logger, + Param, + ParseIntPipe, + Post, + Put, + Query, + UseGuards +} from "@nestjs/common"; +import { ProfesorService } from "./profesor.service"; +import { profesorDto } from "./dto/profesorDto.dto"; +import { Roles } from "../permissions/roles.decorator"; +import { RolesGuard } from "../permissions/roles.guard"; +import { Role } from "../permissions/role.enum"; -@Controller('profesor') +@Controller("profesor") @UseGuards(RolesGuard) export class ProfesorController { - constructor(private profesorService: ProfesorService) {} + constructor(private profesorService: ProfesorService) { + } @Post() - @Roles(Role.Responsable,Role.Admin) + @Roles(Role.Responsable, Role.Admin) async register(@Body() data: profesorDto) { + Logger.debug("register profesor"); return this.profesorService.register(data); } @Get() findAll() { + Logger.debug("findAllProfesors"); return this.profesorService.findAll(); } - @Get('page') - findAllPaginated(@Query('page') page: number = 1, @Query('limit') limit: number = 10, @Query() filters: any) { - page = page < 1 ? 1 : page; - limit = limit > 10 || limit < 1 ? 10 : limit; + @Get("page") + findAllPaginated(@Query("page") page: number = 1, @Query("limit") limit: number = 10, @Query() filters: any) { + try { + Logger.debug("Page Profesors"); + page = page < 1 ? 1 : page; + limit = limit > 10 || limit < 1 ? 10 : limit; + return this.profesorService.findAllPaginated(page, limit, filters); + } catch (err) { + Logger.error("profesor controller ", err.error); + return []; + } - return this.profesorService.findAllPaginated(page, limit, filters); } - @Put(':id_profesor') - @Roles(Role.Responsable,Role.Admin) - async modify(@Param('id_profesor', ParseIntPipe) id_profesor: number, @Body() data: profesorDto) { + @Put(":id_profesor") + @Roles(Role.Responsable, Role.Admin) + async modify(@Param("id_profesor", ParseIntPipe) id_profesor: number, @Body() data: profesorDto) { + Logger.debug("put Profesors by id"); + return this.profesorService.modify(id_profesor, data); } - @Delete(':id_profesor') - @Roles(Role.Responsable,Role.Admin) - async remove(@Param('id_profesor', ParseIntPipe) id_profesor: number) { + @Delete(":id_profesor") + @Roles(Role.Responsable, Role.Admin) + async remove(@Param("id_profesor", ParseIntPipe) id_profesor: number) { + Logger.debug("delete Profesors by id"); + return this.profesorService.remove(id_profesor); } - @Get(':id_profesor') - async profile(@Param('id_profesor', ParseIntPipe) id_profesor: number) { + @Get(":id_profesor") + async profile(@Param("id_profesor", ParseIntPipe) id_profesor: number) { + Logger.debug("get Profesors by id"); + return this.profesorService.profile(id_profesor); } diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index a5b1d04..51a8465 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -1,19 +1,19 @@ -import { HttpException, Injectable } from '@nestjs/common'; -import { Profesor } from './entities/profesor.entity'; -import { DatosAcademicosService } from '../datos_academicos/datos_academicos.service'; -import { LineasInvestigacionService } from '../lineas_investigacion/lineas_investigacion.service'; -import { ProyectosAcademicosService } from '../proyectos_academicos/proyectos_academicos.service'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { profesorDto } from './dto/profesorDto.dto'; -import { ProyectosAcademicos } from '../proyectos_academicos/entities/proyectos_academicos.entity'; -import { DatosAcademicos } from '../datos_academicos/entities/datos_academicos.entity' -import { LineasInvestigacion } from '../lineas_investigacion/entities/lineas_investigacion.entity' +import { HttpException, Injectable, Logger } from "@nestjs/common"; +import { Profesor } from "./entities/profesor.entity"; +import { DatosAcademicosService } from "../datos_academicos/datos_academicos.service"; +import { LineasInvestigacionService } from "../lineas_investigacion/lineas_investigacion.service"; +import { ProyectosAcademicosService } from "../proyectos_academicos/proyectos_academicos.service"; +import { InjectRepository } from "@nestjs/typeorm"; +import { Repository } from "typeorm"; +import { profesorDto } from "./dto/profesorDto.dto"; +import { ProyectosAcademicos } from "../proyectos_academicos/entities/proyectos_academicos.entity"; +import { DatosAcademicos } from "../datos_academicos/entities/datos_academicos.entity"; +import { LineasInvestigacion } from "../lineas_investigacion/entities/lineas_investigacion.entity"; @Injectable() export class ProfesorService { constructor( - @InjectRepository(Profesor) + @InjectRepository(Profesor) private readonly profesorRepository: Repository, private readonly datosAcademicosService: DatosAcademicosService, private readonly lineasInvestigacionService: LineasInvestigacionService, @@ -23,13 +23,14 @@ export class ProfesorService { @InjectRepository(LineasInvestigacion) private readonly lineasInvestigacionRepository: Repository, @InjectRepository(ProyectosAcademicos) - private readonly proyectosAcademicosRepository: Repository, - ) {} + private readonly proyectosAcademicosRepository: Repository + ) { + } private async findAvailableId(): Promise { let id = 1; let exists = true; - + while (exists) { if (!await this.profesorRepository.findOne({ where: { id_profesor: id } })) { exists = false; @@ -41,14 +42,14 @@ export class ProfesorService { //register teacher async register(data: profesorDto): Promise { - const { num_trabajador, rfc, proyectosAcademicos, datosAcademicos, lineasInvestigacion} = data; + const { num_trabajador, rfc, proyectosAcademicos, datosAcademicos, lineasInvestigacion } = data; if (await this.profesorRepository.findOne({ where: { rfc } })) { - throw new HttpException('rfc already exist', 403); + throw new HttpException("rfc already exist", 403); } if (await this.profesorRepository.findOne({ where: { num_trabajador } })) { - throw new HttpException('number of worker already exist', 403); + throw new HttpException("number of worker already exist", 403); } const availableId = await this.findAvailableId(); @@ -61,7 +62,7 @@ export class ProfesorService { const newProyecto = this.proyectosAcademicosRepository.create({ ...proyecto, profesor: savedProfesor, - id_profesor: savedProfesor.id_profesor, + id_profesor: savedProfesor.id_profesor }); return newProyecto; }); @@ -73,7 +74,7 @@ export class ProfesorService { const newLinea = this.lineasInvestigacionRepository.create({ ...linea, profesor: savedProfesor, - id_profesor: savedProfesor.id_profesor, + id_profesor: savedProfesor.id_profesor }); return newLinea; }); @@ -85,7 +86,7 @@ export class ProfesorService { const newDato = this.datosAcademicosRepository.create({ ...datosAcademicos, profesor: savedProfesor, - id_profesor: savedProfesor.id_profesor, + id_profesor: savedProfesor.id_profesor }); return newDato; }); @@ -99,8 +100,8 @@ export class ProfesorService { async findAll(): Promise { return this.profesorRepository.find({ order: { - nombre: 'ASC', - }, + nombre: "ASC" + } }); } @@ -108,7 +109,7 @@ export class ProfesorService { async modify(id_profesor: number, data: profesorDto) { const profesor = await this.profesorRepository.findOne({ where: { id_profesor } }); if (!profesor) { - throw new HttpException('Profesor not found', 404); + throw new HttpException("Profesor not found", 404); } const { proyectosAcademicos, datosAcademicos, lineasInvestigacion, ...profesorData } = data; @@ -122,7 +123,7 @@ export class ProfesorService { const newProyecto = this.proyectosAcademicosRepository.create({ ...proyecto, profesor: savedProfesor, - id_profesor: savedProfesor.id_profesor, + id_profesor: savedProfesor.id_profesor }); return newProyecto; }); @@ -130,12 +131,12 @@ export class ProfesorService { } if (lineasInvestigacion) { - await this.lineasInvestigacionRepository.delete({ profesor: {id_profesor}}); + await this.lineasInvestigacionRepository.delete({ profesor: { id_profesor } }); const lineas = lineasInvestigacion.map(linea => { const newLinea = this.lineasInvestigacionRepository.create({ ...linea, profesor: savedProfesor, - id_profesor: savedProfesor.id_profesor, + id_profesor: savedProfesor.id_profesor }); return newLinea; }); @@ -148,7 +149,7 @@ export class ProfesorService { const newDato = this.datosAcademicosRepository.create({ ...datosAcademicos, profesor: savedProfesor, - id_profesor: savedProfesor.id_profesor, + id_profesor: savedProfesor.id_profesor }); return newDato; }); @@ -160,28 +161,28 @@ export class ProfesorService { //remove teacher async remove(id_profesor: number) { - const profesor = await this.profesorRepository.findOne({ where: { id_profesor }, relations: ['datosAcademicos'] }); + const profesor = await this.profesorRepository.findOne({ where: { id_profesor }, relations: ["datosAcademicos"] }); if (!profesor) { - throw new HttpException('Profesor not found', 404); + throw new HttpException("Profesor not found", 404); } - await this.datosAcademicosService.removeByProfesorId(id_profesor); - await this.lineasInvestigacionService.removeByProfesorId(id_profesor); - await this.proyectosAcademicosService.removeByProfesorId(id_profesor); + await this.datosAcademicosService.removeByProfesorId(id_profesor); + await this.lineasInvestigacionService.removeByProfesorId(id_profesor); + await this.proyectosAcademicosService.removeByProfesorId(id_profesor); await this.profesorRepository.remove(profesor); - return { message: 'Profesor removed successfully' }; + return { message: "Profesor removed successfully" }; } //brings teachers by id async profile(id_profesor: number) { const profesor = await this.profesorRepository.findOne({ where: { id_profesor }, - relations: ['proyectosAcademicos', 'datosAcademicos', 'lineasInvestigacion'], + relations: ["proyectosAcademicos", "datosAcademicos", "lineasInvestigacion"] }); - + if (!profesor) { - throw new HttpException('Profesor not found', 404); + throw new HttpException("Profesor not found", 404); } return profesor; @@ -192,43 +193,53 @@ export class ProfesorService { limit: number, filters: any ): Promise<{ profesores: Profesor[], total: number, totalPages: number }> { - const query = this.profesorRepository.createQueryBuilder('profesor'); - + const query = this.profesorRepository.createQueryBuilder("profesor"); + if (filters.nombre) { - query.andWhere('profesor.nombre LIKE :nombre', { nombre: `%${filters.nombre}%` }); + Logger.debug('fiter by name'); + + query.andWhere("profesor.nombre LIKE :nombre", { nombre: `%${filters.nombre}%` }); } - + if (filters.adscripcion) { - query.andWhere('profesor.adscripcion = :adscripcion', { adscripcion: filters.adscripcion }); + Logger.debug("fiter by adscription"); + + query.andWhere("profesor.adscripcion = :adscripcion", { adscripcion: filters.adscripcion }); } - + if (filters.categoria) { - query.andWhere('profesor.categoria = :categoria', { categoria: filters.categoria }); + Logger.debug("fiter by category"); + + query.andWhere("profesor.categoria = :categoria", { categoria: filters.categoria }); } - + if (filters.edificio) { - query.andWhere('profesor.edificio = :edificio', { edificio: filters.edificio }); + Logger.debug("fiter by building"); + + query.andWhere("profesor.edificio = :edificio", { edificio: filters.edificio }); } - - if (typeof filters.activo !== 'undefined') { - query.andWhere('profesor.activo = :activo', { activo: filters.activo }); + + if (typeof filters.activo !== "undefined") { + Logger.debug("fiter by is active"); + + query.andWhere("profesor.activo = :activo", { activo: filters.activo }); } else { - query.orderBy('profesor.activo', 'DESC'); + query.orderBy("profesor.activo", "DESC"); } - - query.addOrderBy('profesor.nombre', 'ASC'); - + + query.addOrderBy("profesor.nombre", "ASC"); + const [profesores, total] = await query .skip((page - 1) * limit) .take(limit) .getManyAndCount(); - + const totalPages = Math.ceil(total / limit); - + return { profesores, total, totalPages }; } - - + + async updateImageURL(id_profesor: number, imageUrl: string): Promise { await this.profesorRepository.update(id_profesor, { fotografia: imageUrl }); }