From a0b40e967777b547f4465aa0a268056a40c898eb Mon Sep 17 00:00:00 2001 From: IO Date: Sun, 16 Jun 2024 16:51:45 -0600 Subject: [PATCH] EP teacher --- src/Profesor/dto/profesorDto.dto.ts | 11 +-- src/Profesor/dto/profesorFilterDto.dto.ts | 39 ++++++++++ src/Profesor/entities/profesor.entity.ts | 89 +++++++++++------------ src/Profesor/profesor.controller.spec.ts | 8 +- src/Profesor/profesor.controller.ts | 20 +++-- src/Profesor/profesor.service.ts | 61 ++++++++++++++-- src/auth/auth.service.ts | 20 ++--- src/auth/dto/registerDto.dto.ts | 4 +- 8 files changed, 168 insertions(+), 84 deletions(-) create mode 100644 src/Profesor/dto/profesorFilterDto.dto.ts diff --git a/src/Profesor/dto/profesorDto.dto.ts b/src/Profesor/dto/profesorDto.dto.ts index 1523062..87607ab 100644 --- a/src/Profesor/dto/profesorDto.dto.ts +++ b/src/Profesor/dto/profesorDto.dto.ts @@ -1,4 +1,4 @@ -import { IsBoolean, IsDate, IsEmail, IsEmpty, IsNotEmpty, IsNumber, IsString, Length,} from "class-validator"; +import { IsBoolean, IsEmpty, IsNotEmpty, IsNumber, IsString, Length,} from "class-validator"; export class profesorDto{ @@ -89,13 +89,4 @@ export class profesorDto{ @IsBoolean() @IsNotEmpty() mostrar: boolean = true; - - @IsDate() - @IsNotEmpty() - fecha_alta: Date; - - @IsDate() - @IsNotEmpty() - fecha_actualizacion: Date; - } \ No newline at end of file diff --git a/src/Profesor/dto/profesorFilterDto.dto.ts b/src/Profesor/dto/profesorFilterDto.dto.ts new file mode 100644 index 0000000..4451a30 --- /dev/null +++ b/src/Profesor/dto/profesorFilterDto.dto.ts @@ -0,0 +1,39 @@ +import { IsOptional, IsString, IsInt, IsBoolean } from 'class-validator'; + +export class ProfesorFilterDto { + @IsOptional() + @IsString() + nombre?: string; + + @IsOptional() + @IsInt() + id_categoria?: number; + + /* + @IsOptional() + @IsString() + num_trabajador?: string; + */ + + @IsOptional() + @IsString() + extension?: string; + + @IsOptional() + @IsInt() + id_adscripcion?: number; + + @IsOptional() + @IsInt() + id_edificio?: number; + + @IsOptional() + @IsBoolean() + activo?: boolean; + + /* + @IsOptional() + @IsBoolean() + mostrar?: boolean; + */ +} diff --git a/src/Profesor/entities/profesor.entity.ts b/src/Profesor/entities/profesor.entity.ts index 9f3015a..06608ef 100644 --- a/src/Profesor/entities/profesor.entity.ts +++ b/src/Profesor/entities/profesor.entity.ts @@ -1,65 +1,64 @@ -import { Column, Entity, PrimaryColumn, Timestamp } from "typeorm"; - +import { Column, Entity, PrimaryColumn } from "typeorm"; @Entity() -export class Profesor{ - @PrimaryColumn({type:'int', length: 11, nullable:false}) - id_profesor: number; +export class Profesor { + @PrimaryColumn({ type: 'int', nullable: false }) + id_profesor: number; - @Column({ type: 'int', nullable: false }) - id_usuario: number; + @Column({ type: 'int', nullable: false }) + id_usuario: number; - @Column({ type: 'varchar', length: 10, nullable: true }) - num_trabajador: string; + @Column({ type: 'varchar', length: 10, nullable: true }) + num_trabajador: string; - @Column({ type: 'varchar', length: 80, nullable: false }) - nombre: string; + @Column({ type: 'varchar', length: 80, nullable: false }) + nombre: string; - @Column({ type: 'varchar', length: 10, nullable: true }) - rfc: string; + @Column({ type: 'varchar', length: 10, nullable: true }) + rfc: string; - @Column({ type: 'varchar', length: 3, nullable: true }) - homoclave: string; + @Column({ type: 'varchar', length: 3, nullable: true }) + homoclave: string; - @Column({ type: 'varchar', length: 13, nullable: true }) - tel_oficina: string; + @Column({ type: 'varchar', length: 13, nullable: true }) + tel_oficina: string; - @Column({ type: 'varchar', length: 10, nullable: true }) - extension: string; + @Column({ type: 'varchar', length: 10, nullable: true }) + extension: string; - @Column({ type: 'varchar', length: 13, nullable: true }) - tel_personal: string; + @Column({ type: 'varchar', length: 13, nullable: true }) + tel_personal: string; - @Column({ type: 'varchar', length: 65, nullable: true }) - correo_pcp: string; + @Column({ type: 'varchar', length: 65, nullable: true }) + correo_pcp: string; - @Column({ type: 'varchar', length: 65, nullable: true }) - correo_per: string; + @Column({ type: 'varchar', length: 65, nullable: true }) + correo_per: string; - @Column({ type: 'int', nullable: true }) - id_adscripcion: number; + @Column({ type: 'int', nullable: true }) + id_adscripcion: number; - @Column({ type: 'int', nullable: true }) - id_categoria: number; + @Column({ type: 'int', nullable: true }) + id_categoria: number; - @Column({ type: 'int', nullable: true }) - id_edificio: number; + @Column({ type: 'int', nullable: true }) + id_edificio: number; - @Column({ type: 'varchar', length: 256, nullable: true }) - ubicacion: string; + @Column({ type: 'varchar', length: 256, nullable: true }) + ubicacion: string; - @Column({ type: 'varchar', length: 150, nullable: true }) - fotografia: string; + @Column({ type: 'varchar', length: 150, nullable: true }) + fotografia: string; - @Column({ type: 'boolean', nullable: false, default: false }) - activo: boolean; + @Column({ type: 'boolean', nullable: false, default: false }) + activo: boolean; - @Column({ type: 'boolean', nullable: false, default: true }) - mostrar: boolean; + @Column({ type: 'boolean', nullable: false, default: true }) + mostrar: boolean; - @Column({ type: 'datetime', nullable: false, default: () => 'CURRENT_DATETIME' }) - fecha_alta: Date; - - @Column({ type: 'timestamp', nullable: false, default: () => 'CURRENT_TIMESTAMP' }) - fecha_actualizacion: Date; -} \ No newline at end of file + @Column({ type: 'timestamp', nullable: false, default: () => 'CURRENT_TIMESTAMP' }) + fecha_alta: Date; + + @Column({ type: 'timestamp', nullable: false, default: () => 'CURRENT_TIMESTAMP', onUpdate: 'CURRENT_TIMESTAMP' }) + fecha_actualizacion: Date; +} diff --git a/src/Profesor/profesor.controller.spec.ts b/src/Profesor/profesor.controller.spec.ts index 80b4707..5d6f13f 100644 --- a/src/Profesor/profesor.controller.spec.ts +++ b/src/Profesor/profesor.controller.spec.ts @@ -1,15 +1,15 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { profesorController } from './profesor.controller'; +import { ProfesorController } from './profesor.controller'; describe('ProfesorController', () => { - let controller: profesorController; + let controller: ProfesorController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - controllers: [profesorController], + controllers: [ProfesorController], }).compile(); - controller = module.get(profesorController); + controller = module.get(ProfesorController); }); it('should be defined', () => { diff --git a/src/Profesor/profesor.controller.ts b/src/Profesor/profesor.controller.ts index bca70e8..8439aa3 100644 --- a/src/Profesor/profesor.controller.ts +++ b/src/Profesor/profesor.controller.ts @@ -1,33 +1,39 @@ import { Body, Controller, Delete, Get, Param, ParseIntPipe, Post, Put } from '@nestjs/common'; import { ProfesorService } from './profesor.service'; import { profesorDto } from './dto/profesorDto.dto'; +import { ProfesorFilterDto } from './dto/profesorFilterDto.dto'; @Controller('profesor') export class ProfesorController { constructor(private profesorService: ProfesorService) {} - @Post('alta') + @Post() async postRegister(@Body() data: profesorDto) { return this.profesorService.register(data); } - @Put('modificacion/:id_profesor') + @Get() + findAll() { + return this.profesorService.findAll(); + } + + @Put(':id_profesor') async postModify(@Param('id_profesor', ParseIntPipe) id_profesor: number, @Body() data: profesorDto) { return this.profesorService.modify(id_profesor, data); } - @Delete('borrado/:id_profesor') + @Delete(':id_profesor') async remove(@Param('id_profesor', ParseIntPipe) id_profesor: number) { return this.profesorService.remove(id_profesor); } - @Get('profile/:id_profesor') + @Get(':id_profesor') async profile(@Param('id_profesor', ParseIntPipe) id_profesor: number) { return this.profesorService.profile(id_profesor); } - @Post('profile/filter') - async filter(@Body() data: profesorDto) { - return this.profesorService.filter(data); + @Post('filter') + async filter(@Body() filterDto: ProfesorFilterDto) { + return this.profesorService.filter(filterDto); } } diff --git a/src/Profesor/profesor.service.ts b/src/Profesor/profesor.service.ts index b93a985..df35720 100644 --- a/src/Profesor/profesor.service.ts +++ b/src/Profesor/profesor.service.ts @@ -3,6 +3,7 @@ import { Profesor } from './entities/profesor.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { profesorDto } from './dto/profesorDto.dto'; +import { ProfesorFilterDto } from './dto/profesorFilterDto.dto'; @Injectable() export class ProfesorService { @@ -10,18 +11,30 @@ export class ProfesorService { @InjectRepository(Profesor) private profesorRepository: Repository ) {} + //register teacher async register(data: profesorDto) { - const { nombre } = data; + const {num_trabajador,rfc } = data; - const existingProfesor = await this.profesorRepository.findOne({ where: { nombre } }); - if (existingProfesor) { - throw new HttpException('User already exist', 403); + const existrfc = await this.profesorRepository.findOne({where:{rfc}}); + if(existrfc){ + throw new HttpException('rfc already exist', 403); + } + + const existnumber = await this.profesorRepository.findOne({where:{num_trabajador}}); + if(existnumber){ + throw new HttpException('number of worker already exist', 403); } const newProfesor = this.profesorRepository.create(data); return this.profesorRepository.save(newProfesor); } + //brings all teachers + async findAll(): Promise { + return this.profesorRepository.find(); + } + + //modify teacher async modify(id_profesor: number, data: profesorDto) { const profesor = await this.profesorRepository.findOne({ where: { id_profesor } }); if (!profesor) { @@ -32,6 +45,7 @@ export class ProfesorService { return this.profesorRepository.save(profesor); } + //remove teacher async remove(id_profesor: number) { const profesor = await this.profesorRepository.findOne({ where: { id_profesor } }); if (!profesor) { @@ -42,6 +56,7 @@ export class ProfesorService { return { message: 'Profesor removed successfully' }; } + //brings teachers by id async profile(id_profesor: number) { const profesor = await this.profesorRepository.findOne({ where: { id_profesor } }); if (!profesor) { @@ -51,13 +66,45 @@ export class ProfesorService { return profesor; } - async filter(data: profesorDto) { + //brings teachers by filter + async filter(filterDto: ProfesorFilterDto): Promise { const query = this.profesorRepository.createQueryBuilder('profesor'); - if (data.nombre) { - query.andWhere('profesor.nombre = :nombre', { nombre: data.nombre }); + if (filterDto.nombre) { + query.andWhere('profesor.nombre like :nombre', { nombre: `%${filterDto.nombre}%` }); } + if (filterDto.id_categoria !== undefined) { + query.andWhere('profesor.id_categoria = :id_categoria', { id_categoria: filterDto.id_categoria }); + } + + /* + if (filterDto.num_trabajador) { + query.andWhere('profesor.num_trabajador like :num_trabajador', { num_trabajador: `%${filterDto.num_trabajador}%` }); + } + */ + + if (filterDto.extension) { + query.andWhere('profesor.extension like :extension', { extension: `%${filterDto.extension}%` }); + } + + if (filterDto.id_adscripcion !== undefined) { + query.andWhere('profesor.id_adscripcion = :id_adscripcion', { id_adscripcion: filterDto.id_adscripcion }); + } + + if (filterDto.id_edificio !== undefined) { + query.andWhere('profesor.id_edificio = :id_edificio', { id_edificio: filterDto.id_edificio }); + } + + if (filterDto.activo !== undefined) { + query.andWhere('profesor.activo = :activo', { activo: filterDto.activo }); + } + + /* + if (filterDto.mostrar !== undefined) { + query.andWhere('profesor.mostrar = :mostrar', { mostrar: filterDto.mostrar }); + } + */ return query.getMany(); } diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 8ccdc13..5afe340 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -19,36 +19,37 @@ export class AuthService { @InjectRepository(User) private userRepository: Repository ) {} + //register users async register(data: registerDto){ - const{username,password,} = data; + const{usuario,contraseña,} = data; - if(await this.usersService.findOne(username)){ + if(await this.usersService.findOne(usuario)){ throw new HttpException("User already exist",403); } - const hashedpassword = await hash(password, 10); + const hashedpassword = await hash(contraseña, 10); - data = {...data, password:hashedpassword} + data = {...data, contraseña:hashedpassword} return this.userRepository.save( this.userRepository.create(data) ) } - + //singin async signIn(data: registerDto) { - const{username,password} = data; - const user = await this.usersService.findOne(username); + const{usuario,contraseña} = data; + const user = await this.usersService.findOne(usuario); if (!user) { throw new UnauthorizedException('Invalid name'); } - const checkPassword = await compare(password, (await user).password) + const checkPassword = await compare(contraseña, (await user).contraseña) if (!checkPassword) { throw new UnauthorizedException('Invalid password'); } const payload = { idUser: user.userId, - username: user.username + username: user.usuario }; const token = this.jwtService.sign(payload); @@ -74,6 +75,7 @@ export class AuthService { } + //validate tojen of users async validateToken(token: string): Promise { try { const decoded = this.jwtService.verify(token, { diff --git a/src/auth/dto/registerDto.dto.ts b/src/auth/dto/registerDto.dto.ts index 54b1c78..f465b1a 100644 --- a/src/auth/dto/registerDto.dto.ts +++ b/src/auth/dto/registerDto.dto.ts @@ -4,11 +4,11 @@ export class registerDto{ @IsString() @IsNotEmpty() - username: string; + usuario: string; @IsString() @IsNotEmpty() - password: string; + contraseña: string; } \ No newline at end of file