From 73db06d77395895784aea2e9b3e11fea88673435 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Tue, 19 Apr 2022 23:54:31 -0500 Subject: [PATCH 1/7] listo --- catalogos.sql | 18 +++++++++ .../dto/institucion-dia-update.dto.ts | 23 ++++++++++++ .../entity/institucion-dia.entity.ts | 10 ++--- .../institucion-dia.controller.ts | 19 ++++++++-- src/institucion-dia/institucion-dia.module.ts | 3 +- .../institucion-dia.service.ts | 37 ++++++++++++++++++- 6 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 src/institucion-dia/dto/institucion-dia-update.dto.ts diff --git a/catalogos.sql b/catalogos.sql index 74899ee..d6e1d7f 100644 --- a/catalogos.sql +++ b/catalogos.sql @@ -20,3 +20,21 @@ INSERT INTO tipo_usuario (tipo_usuario) VALUES ("Operador"); INSERT INTO tipo_usuario (tipo_usuario) VALUES ("Profesor"); INSERT INTO tipo_usuario (tipo_usuario) VALUES ("Alumno"); INSERT INTO tipo_usuario (tipo_usuario) VALUES ("Posgrado"); + +INSERT INTO dia (dia) VALUES ("Lunes"); +INSERT INTO dia (dia) VALUES ("Martes"); +INSERT INTO dia (dia) VALUES ("Miercoles"); +INSERT INTO dia (dia) VALUES ("Jueves"); +INSERT INTO dia (dia) VALUES ("Viernes"); + +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (1, 1); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (1, 2); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (1, 3); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (1, 4); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (1, 5); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (2, 1); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (2, 2); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (2, 3); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (2, 4); +INSERT INTO institucion_dia (id_institucion, id_dia) VALUES (2, 5); + diff --git a/src/institucion-dia/dto/institucion-dia-update.dto.ts b/src/institucion-dia/dto/institucion-dia-update.dto.ts new file mode 100644 index 0000000..982e3c1 --- /dev/null +++ b/src/institucion-dia/dto/institucion-dia-update.dto.ts @@ -0,0 +1,23 @@ +import { + IsBoolean, + IsMilitaryTime, + IsNumber, + IsOptional, +} from 'class-validator'; + +export class InstitucionDiaUpdateDto { + @IsNumber() + id_institucion_dia: number; + + @IsBoolean() + @IsOptional() + activo: boolean; + + @IsMilitaryTime() + @IsOptional() + hora_fin: string; + + @IsMilitaryTime() + @IsOptional() + hora_inicio: string; +} diff --git a/src/institucion-dia/entity/institucion-dia.entity.ts b/src/institucion-dia/entity/institucion-dia.entity.ts index 3b0f161..92b9b8c 100644 --- a/src/institucion-dia/entity/institucion-dia.entity.ts +++ b/src/institucion-dia/entity/institucion-dia.entity.ts @@ -18,13 +18,13 @@ export class InstitucionDia { @Column({ type: Boolean, nullable: false, default: false }) activo: boolean; - @Column({ type: Date, nullable: false }) - hora_fin: Date; + @Column({ type: String, nullable: false, default: '17:45', length: 5 }) + hora_fin: string; - @Column({ type: Date, nullable: false }) - hora_inicio: Date; + @Column({ type: String, nullable: false, default: '09:00', length: 5 }) + hora_inicio: string; - @ManyToOne(() => Dia, (dia) => dia.institucionesDias) + @ManyToOne(() => Dia, (dia) => dia.institucionesDias, { eager: true }) @JoinColumn({ name: 'id_dia' }) dia: Dia; diff --git a/src/institucion-dia/institucion-dia.controller.ts b/src/institucion-dia/institucion-dia.controller.ts index 24a6110..319ec51 100644 --- a/src/institucion-dia/institucion-dia.controller.ts +++ b/src/institucion-dia/institucion-dia.controller.ts @@ -1,13 +1,26 @@ -import { Controller, Get, Put } from '@nestjs/common'; +import { Body, Controller, Get, Put, Query } from '@nestjs/common'; import { InstitucionDiaService } from './institucion-dia.service'; +import { IdInstitucionDto } from '../dto/id-institucion.dto'; +import { InstitucionDiaUpdateDto } from './dto/institucion-dia-update.dto'; @Controller('institucion-dia') export class InstitucionDiaController { constructor(private institucionDiaService: InstitucionDiaService) {} @Get() - get() {} + get() { + return this.institucionDiaService.findAll(); + } + + @Get('instituciones_dias') + institucionesDias(@Query() query: IdInstitucionDto) { + return this.institucionDiaService.findAllByIdInstitucion( + Number(query.id_institucion), + ); + } @Put() - update() {} + update(@Body() body: InstitucionDiaUpdateDto) { + return this.institucionDiaService.update(body); + } } diff --git a/src/institucion-dia/institucion-dia.module.ts b/src/institucion-dia/institucion-dia.module.ts index 95cdb42..88c0e88 100644 --- a/src/institucion-dia/institucion-dia.module.ts +++ b/src/institucion-dia/institucion-dia.module.ts @@ -4,9 +4,10 @@ import { InstitucionDiaController } from './institucion-dia.controller'; import { InstitucionDiaService } from './institucion-dia.service'; import { InstitucionDia } from './entity/institucion-dia.entity'; import { Dia } from './entity/dia.entity'; +import { InstitucionModule } from '../institucion/institucion.module'; @Module({ - imports: [TypeOrmModule.forFeature([Dia, InstitucionDia])], + imports: [TypeOrmModule.forFeature([Dia, InstitucionDia]), InstitucionModule], controllers: [InstitucionDiaController], providers: [InstitucionDiaService], }) diff --git a/src/institucion-dia/institucion-dia.service.ts b/src/institucion-dia/institucion-dia.service.ts index 1b06475..162959a 100644 --- a/src/institucion-dia/institucion-dia.service.ts +++ b/src/institucion-dia/institucion-dia.service.ts @@ -2,11 +2,44 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { InstitucionDia } from './entity/institucion-dia.entity'; - +import { InstitucionService } from '../institucion/institucion.service'; @Injectable() export class InstitucionDiaService { constructor( @InjectRepository(InstitucionDia) - private repository: Repository, + private repositoryInstitucionDia: Repository, + private institucionService: InstitucionService, ) {} + + findAll() { + return this.repositoryInstitucionDia.find(); + } + + findAllByIdInstitucion(id_institucion: number) { + return this.institucionService + .findById(id_institucion) + .then((institucion) => + this.repositoryInstitucionDia.find({ institucion }), + ); + } + + findById(id_institucion_dia: number) { + return this.repositoryInstitucionDia + .findOne({ id_institucion_dia }) + .then((institucionDia) => { + if (!institucionDia) throw new Error('No existe esta institucion dia.'); + return institucionDia; + }); + } + + update(attrs: Partial) { + return this.findById(attrs.id_institucion_dia) + .then((institucionDia) => { + Object.assign(institucionDia, attrs); + return this.repositoryInstitucionDia.save(institucionDia); + }) + .then((_) => ({ + message: 'Se actualió correctamente la institucion infracción.', + })); + } } From 5fa2e4cf21819e927b2d78e08d934336fc73c1f7 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:13:29 -0500 Subject: [PATCH 2/7] institucion listo --- .../dto/institucion-dia-update.dto.ts | 4 ++-- .../dto/institucion-infraccion-update.dto.ts | 4 ++-- .../dto/institucion-tipo-carrito-update.dto.ts | 4 ++-- src/institucion/dto/institucion-update.dto.ts | 18 ++++++++++++++++++ src/institucion/institucion.controller.ts | 13 +++++++++++-- src/institucion/institucion.service.ts | 11 +++++++++++ src/modulo/dto/modulo-create.dto.ts | 4 ++-- src/modulo/dto/modulo-update.dto.ts | 4 ++-- 8 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 src/institucion/dto/institucion-update.dto.ts diff --git a/src/institucion-dia/dto/institucion-dia-update.dto.ts b/src/institucion-dia/dto/institucion-dia-update.dto.ts index 982e3c1..f090536 100644 --- a/src/institucion-dia/dto/institucion-dia-update.dto.ts +++ b/src/institucion-dia/dto/institucion-dia-update.dto.ts @@ -1,12 +1,12 @@ import { IsBoolean, + IsInt, IsMilitaryTime, - IsNumber, IsOptional, } from 'class-validator'; export class InstitucionDiaUpdateDto { - @IsNumber() + @IsInt() id_institucion_dia: number; @IsBoolean() diff --git a/src/institucion-infraccion/dto/institucion-infraccion-update.dto.ts b/src/institucion-infraccion/dto/institucion-infraccion-update.dto.ts index 49c43a0..dee5228 100644 --- a/src/institucion-infraccion/dto/institucion-infraccion-update.dto.ts +++ b/src/institucion-infraccion/dto/institucion-infraccion-update.dto.ts @@ -1,7 +1,7 @@ -import { IsNumber } from 'class-validator'; +import { IsInt, IsNumber } from 'class-validator'; export class InstitucionInfraccionUpdateDto { - @IsNumber() + @IsInt() id_institucion_infraccion: number; @IsNumber() diff --git a/src/institucion-tipo-carrito/dto/institucion-tipo-carrito-update.dto.ts b/src/institucion-tipo-carrito/dto/institucion-tipo-carrito-update.dto.ts index c373531..0fae001 100644 --- a/src/institucion-tipo-carrito/dto/institucion-tipo-carrito-update.dto.ts +++ b/src/institucion-tipo-carrito/dto/institucion-tipo-carrito-update.dto.ts @@ -1,7 +1,7 @@ -import { IsBoolean, IsNumber } from 'class-validator'; +import { IsBoolean, IsInt, IsNumber } from 'class-validator'; export class InstitucionTipoCarritoUpdateDto { - @IsNumber() + @IsInt() id_institucion_tipo_carrito: number; @IsBoolean() diff --git a/src/institucion/dto/institucion-update.dto.ts b/src/institucion/dto/institucion-update.dto.ts new file mode 100644 index 0000000..eac66a7 --- /dev/null +++ b/src/institucion/dto/institucion-update.dto.ts @@ -0,0 +1,18 @@ +import { IsNumber, IsOptional, IsInt } from 'class-validator'; + +export class InstitucionUpdateDto { + @IsInt() + id_institucion: number; + + @IsNumber() + @IsOptional() + tiempo_prestamo: number; + + @IsNumber() + @IsOptional() + tiempo_recoger: number; + + @IsNumber() + @IsOptional() + dias_multa_retraso: number; +} diff --git a/src/institucion/institucion.controller.ts b/src/institucion/institucion.controller.ts index a3baeb0..0d44379 100644 --- a/src/institucion/institucion.controller.ts +++ b/src/institucion/institucion.controller.ts @@ -1,5 +1,7 @@ -import { Controller, Get, Put } from '@nestjs/common'; +import { Body, Controller, Get, Put, Query } from '@nestjs/common'; import { InstitucionService } from './institucion.service'; +import { IdInstitucionDto } from '../dto/id-institucion.dto'; +import { InstitucionUpdateDto } from './dto/institucion-update.dto'; @Controller('institucion') export class InstitucionController { @@ -10,6 +12,13 @@ export class InstitucionController { return this.institucionService.findAll(); } + @Get('institucion') + institucion(@Query() query: IdInstitucionDto) { + return this.institucionService.findById(Number(query.id_institucion)); + } + @Put() - update() {} + update(@Body() body: InstitucionUpdateDto) { + return this.institucionService.update(body); + } } diff --git a/src/institucion/institucion.service.ts b/src/institucion/institucion.service.ts index fdcc90d..8ffd932 100644 --- a/src/institucion/institucion.service.ts +++ b/src/institucion/institucion.service.ts @@ -20,4 +20,15 @@ export class InstitucionService { return institucion; }); } + + update(attrs: Partial) { + return this.findById(attrs.id_institucion) + .then((institucion) => { + Object.assign(institucion, attrs); + return this.repository.save(institucion); + }) + .then((_) => ({ + message: 'Se actualió correctamente la institucion.', + })); + } } diff --git a/src/modulo/dto/modulo-create.dto.ts b/src/modulo/dto/modulo-create.dto.ts index 5d047b4..e70b29e 100644 --- a/src/modulo/dto/modulo-create.dto.ts +++ b/src/modulo/dto/modulo-create.dto.ts @@ -1,7 +1,7 @@ -import { IsNumber, IsString } from 'class-validator'; +import { IsInt, IsString } from 'class-validator'; export class ModuloCreateDto { - @IsNumber() + @IsInt() id_institucion: number; @IsString() diff --git a/src/modulo/dto/modulo-update.dto.ts b/src/modulo/dto/modulo-update.dto.ts index c62fe59..47a0b61 100644 --- a/src/modulo/dto/modulo-update.dto.ts +++ b/src/modulo/dto/modulo-update.dto.ts @@ -1,7 +1,7 @@ -import { IsBoolean, IsNumber, IsOptional, IsString } from 'class-validator'; +import { IsBoolean, IsInt, IsOptional, IsString } from 'class-validator'; export class ModuloUpdateDto { - @IsNumber() + @IsInt() id_modulo: number; @IsString() From cd0674817fedb31f1f59b837a177664d6ed72710 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:18:14 -0500 Subject: [PATCH 3/7] organiar dtos mal acomodados --- src/institucion/dto/institucion-update.dto.ts | 12 ++++++++---- src/modulo/dto/modulo-update.dto.ts | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/institucion/dto/institucion-update.dto.ts b/src/institucion/dto/institucion-update.dto.ts index eac66a7..f1c9f0a 100644 --- a/src/institucion/dto/institucion-update.dto.ts +++ b/src/institucion/dto/institucion-update.dto.ts @@ -4,6 +4,14 @@ export class InstitucionUpdateDto { @IsInt() id_institucion: number; + @IsNumber() + @IsOptional() + dias_multa_retraso: number; + + @IsNumber() + @IsOptional() + tiempo_entrega: number; + @IsNumber() @IsOptional() tiempo_prestamo: number; @@ -11,8 +19,4 @@ export class InstitucionUpdateDto { @IsNumber() @IsOptional() tiempo_recoger: number; - - @IsNumber() - @IsOptional() - dias_multa_retraso: number; } diff --git a/src/modulo/dto/modulo-update.dto.ts b/src/modulo/dto/modulo-update.dto.ts index 47a0b61..ea258c6 100644 --- a/src/modulo/dto/modulo-update.dto.ts +++ b/src/modulo/dto/modulo-update.dto.ts @@ -4,11 +4,11 @@ export class ModuloUpdateDto { @IsInt() id_modulo: number; - @IsString() - @IsOptional() - modulo?: string; - @IsBoolean() @IsOptional() activo?: boolean; + + @IsString() + @IsOptional() + modulo?: string; } From 2845660f0576e9364dd7ac13ae690bb198973078 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 20 Apr 2022 09:48:21 -0500 Subject: [PATCH 4/7] programa listo --- src/programa/dto/programa-create.dto.ts | 6 ++++++ src/programa/programa.controller.ts | 12 ++++++++++-- src/programa/programa.service.ts | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 src/programa/dto/programa-create.dto.ts diff --git a/src/programa/dto/programa-create.dto.ts b/src/programa/dto/programa-create.dto.ts new file mode 100644 index 0000000..dd9a049 --- /dev/null +++ b/src/programa/dto/programa-create.dto.ts @@ -0,0 +1,6 @@ +import { IsString } from 'class-validator'; + +export class ProgramaCreateDto { + @IsString() + programa: string; +} diff --git a/src/programa/programa.controller.ts b/src/programa/programa.controller.ts index decb9b6..9e56a9a 100644 --- a/src/programa/programa.controller.ts +++ b/src/programa/programa.controller.ts @@ -1,10 +1,18 @@ -import { Controller, Get } from '@nestjs/common'; +import { Body, Controller, Get, Post } from '@nestjs/common'; import { ProgramaService } from './programa.service'; +import { ProgramaCreateDto } from './dto/programa-create.dto'; @Controller('programa') export class ProgramaController { constructor(private programaService: ProgramaService) {} + @Post() + create(@Body() body: ProgramaCreateDto) { + return this.programaService.create(body.programa); + } + @Get() - get() {} + get() { + return this.programaService.findAll(); + } } diff --git a/src/programa/programa.service.ts b/src/programa/programa.service.ts index f857ec6..a08de13 100644 --- a/src/programa/programa.service.ts +++ b/src/programa/programa.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { ConflictException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Programa } from './entity/programa.entity'; @@ -8,4 +8,19 @@ export class ProgramaService { constructor( @InjectRepository(Programa) private repository: Repository, ) {} + + create(programa: string) { + return this.repository + .findOne({ programa }) + .then((existePrograma) => { + if (existePrograma) + throw new ConflictException('Ya existe este programa.'); + return this.repository.save(this.repository.create({ programa })); + }) + .then((_) => ({ message: 'Se creo correctamente el programa.' })); + } + + findAll() { + return this.repository.find(); + } } From 74c05d50712994b7dd092cf8d3ffc28dc30001b6 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 20 Apr 2022 15:49:21 -0500 Subject: [PATCH 5/7] a medias --- .../dto/institucion-dia-update.dto.ts | 13 ++-- .../institucion-infraccion.service.ts | 2 +- .../institucion-tipo-carrito.service.ts | 2 +- src/institucion/dto/institucion-update.dto.ts | 8 +-- src/tipo-usuario/tipo-usuario.module.ts | 1 + src/tipo-usuario/tipo-usuario.service.ts | 10 ++- src/usuario/dto/usuario-escolares.dto.ts | 6 ++ src/usuario/dto/usuario-login.dto.ts | 9 +++ src/usuario/dto/usuario-registrar.dto.ts | 9 +++ src/usuario/dto/usuario-update.dto.ts | 18 +++++ src/usuario/dto/usuario-usuarios.dto.ts | 22 ++++++ src/usuario/dto/usuario.dto.ts | 6 ++ src/usuario/entity/usuario.entity.ts | 3 + src/usuario/usuario.controller.ts | 33 ++++++--- src/usuario/usuario.module.ts | 8 ++- src/usuario/usuario.service.ts | 72 ++++++++++++++++++- 16 files changed, 196 insertions(+), 26 deletions(-) create mode 100644 src/usuario/dto/usuario-escolares.dto.ts create mode 100644 src/usuario/dto/usuario-login.dto.ts create mode 100644 src/usuario/dto/usuario-registrar.dto.ts create mode 100644 src/usuario/dto/usuario-update.dto.ts create mode 100644 src/usuario/dto/usuario-usuarios.dto.ts create mode 100644 src/usuario/dto/usuario.dto.ts diff --git a/src/institucion-dia/dto/institucion-dia-update.dto.ts b/src/institucion-dia/dto/institucion-dia-update.dto.ts index f090536..260b9b4 100644 --- a/src/institucion-dia/dto/institucion-dia-update.dto.ts +++ b/src/institucion-dia/dto/institucion-dia-update.dto.ts @@ -1,9 +1,4 @@ -import { - IsBoolean, - IsInt, - IsMilitaryTime, - IsOptional, -} from 'class-validator'; +import { IsBoolean, IsInt, IsMilitaryTime, IsOptional } from 'class-validator'; export class InstitucionDiaUpdateDto { @IsInt() @@ -11,13 +6,13 @@ export class InstitucionDiaUpdateDto { @IsBoolean() @IsOptional() - activo: boolean; + activo?: boolean; @IsMilitaryTime() @IsOptional() - hora_fin: string; + hora_fin?: string; @IsMilitaryTime() @IsOptional() - hora_inicio: string; + hora_inicio?: string; } diff --git a/src/institucion-infraccion/institucion-infraccion.service.ts b/src/institucion-infraccion/institucion-infraccion.service.ts index 36e4455..c3130ec 100644 --- a/src/institucion-infraccion/institucion-infraccion.service.ts +++ b/src/institucion-infraccion/institucion-infraccion.service.ts @@ -7,7 +7,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { InstitucionInfraccion } from './entity/institucion-infraccion.entity'; import { Infraccion } from './entity/infraccion.entity'; -import { InstitucionService } from 'src/institucion/institucion.service'; +import { InstitucionService } from '../institucion/institucion.service'; @Injectable() export class InstitucionInfraccionService { diff --git a/src/institucion-tipo-carrito/institucion-tipo-carrito.service.ts b/src/institucion-tipo-carrito/institucion-tipo-carrito.service.ts index 2297062..bd90a5b 100644 --- a/src/institucion-tipo-carrito/institucion-tipo-carrito.service.ts +++ b/src/institucion-tipo-carrito/institucion-tipo-carrito.service.ts @@ -7,7 +7,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { InstitucionTipoCarrito } from './entity/institucion-tipo-carrito.entity'; import { TipoCarrito } from './entity/tipo-carrito.entity'; -import { InstitucionService } from 'src/institucion/institucion.service'; +import { InstitucionService } from '../institucion/institucion.service'; @Injectable() export class InstitucionTipoCarritoService { diff --git a/src/institucion/dto/institucion-update.dto.ts b/src/institucion/dto/institucion-update.dto.ts index f1c9f0a..a87c8cc 100644 --- a/src/institucion/dto/institucion-update.dto.ts +++ b/src/institucion/dto/institucion-update.dto.ts @@ -6,17 +6,17 @@ export class InstitucionUpdateDto { @IsNumber() @IsOptional() - dias_multa_retraso: number; + dias_multa_retraso?: number; @IsNumber() @IsOptional() - tiempo_entrega: number; + tiempo_entrega?: number; @IsNumber() @IsOptional() - tiempo_prestamo: number; + tiempo_prestamo?: number; @IsNumber() @IsOptional() - tiempo_recoger: number; + tiempo_recoger?: number; } diff --git a/src/tipo-usuario/tipo-usuario.module.ts b/src/tipo-usuario/tipo-usuario.module.ts index c0ad775..75b7c29 100644 --- a/src/tipo-usuario/tipo-usuario.module.ts +++ b/src/tipo-usuario/tipo-usuario.module.ts @@ -8,5 +8,6 @@ import { TipoUsuario } from './entity/tipo-usuario.entity'; imports: [TypeOrmModule.forFeature([TipoUsuario])], controllers: [TipoUsuarioController], providers: [TipoUsuarioService], + exports: [TipoUsuarioService], }) export class TipoUsuarioModule {} diff --git a/src/tipo-usuario/tipo-usuario.service.ts b/src/tipo-usuario/tipo-usuario.service.ts index 8bec09a..722f206 100644 --- a/src/tipo-usuario/tipo-usuario.service.ts +++ b/src/tipo-usuario/tipo-usuario.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { TipoUsuario } from './entity/tipo-usuario.entity'; @@ -8,4 +8,12 @@ export class TipoUsuarioService { constructor( @InjectRepository(TipoUsuario) private repository: Repository, ) {} + + findById(id_tipo_usuario: number) { + return this.repository.findOne({ id_tipo_usuario }).then((tipoUsuario) => { + if (!tipoUsuario) + throw new NotFoundException('No existe este tipo usuairo'); + return tipoUsuario; + }); + } } diff --git a/src/usuario/dto/usuario-escolares.dto.ts b/src/usuario/dto/usuario-escolares.dto.ts new file mode 100644 index 0000000..3d80972 --- /dev/null +++ b/src/usuario/dto/usuario-escolares.dto.ts @@ -0,0 +1,6 @@ +import { IsNumberString } from 'class-validator'; + +export class UsuarioEscolaresDto { + @IsNumberString() + usuario: string; +} diff --git a/src/usuario/dto/usuario-login.dto.ts b/src/usuario/dto/usuario-login.dto.ts new file mode 100644 index 0000000..2168ad1 --- /dev/null +++ b/src/usuario/dto/usuario-login.dto.ts @@ -0,0 +1,9 @@ +import { IsNumberString, IsString } from 'class-validator'; + +export class UsuarioLoginDto { + @IsNumberString() + usuario: string; + + @IsString() + password: string; +} diff --git a/src/usuario/dto/usuario-registrar.dto.ts b/src/usuario/dto/usuario-registrar.dto.ts new file mode 100644 index 0000000..78a6f23 --- /dev/null +++ b/src/usuario/dto/usuario-registrar.dto.ts @@ -0,0 +1,9 @@ +import { IsInt, IsPhoneNumber } from 'class-validator'; + +export class UsuarioRegistrarDto { + @IsInt() + id_usuario: number; + + @IsPhoneNumber('MX') + telefono: string; +} diff --git a/src/usuario/dto/usuario-update.dto.ts b/src/usuario/dto/usuario-update.dto.ts new file mode 100644 index 0000000..212a7aa --- /dev/null +++ b/src/usuario/dto/usuario-update.dto.ts @@ -0,0 +1,18 @@ +import { IsBoolean, IsInt, IsOptional, IsPhoneNumber } from 'class-validator'; + +export class UsuarioUpdateDto { + @IsInt() + id_usuario: number; + + @IsBoolean() + @IsOptional() + activo?: boolean; + + @IsBoolean() + @IsOptional() + multa?: boolean; + + @IsPhoneNumber() + @IsOptional() + telefono?: string; +} diff --git a/src/usuario/dto/usuario-usuarios.dto.ts b/src/usuario/dto/usuario-usuarios.dto.ts new file mode 100644 index 0000000..3c5b70d --- /dev/null +++ b/src/usuario/dto/usuario-usuarios.dto.ts @@ -0,0 +1,22 @@ +import { IsNumberString, IsOptional } from 'class-validator'; + +export class UsuarioUsuariosDto { + @IsNumberString() + pagina: string; + + @IsNumberString() + @IsOptional() + id_carrera: string; + + @IsNumberString() + @IsOptional() + id_institucion: string; + + @IsNumberString() + @IsOptional() + id_tipo_usuario: string; + + @IsNumberString() + @IsOptional() + usuario: string; +} diff --git a/src/usuario/dto/usuario.dto.ts b/src/usuario/dto/usuario.dto.ts new file mode 100644 index 0000000..97940e5 --- /dev/null +++ b/src/usuario/dto/usuario.dto.ts @@ -0,0 +1,6 @@ +import { IsNumberString } from 'class-validator'; + +export class UsuarioDto { + @IsNumberString() + usuario: string; +} diff --git a/src/usuario/entity/usuario.entity.ts b/src/usuario/entity/usuario.entity.ts index 58f4b57..f158a1c 100644 --- a/src/usuario/entity/usuario.entity.ts +++ b/src/usuario/entity/usuario.entity.ts @@ -25,6 +25,9 @@ export class Usuario { @Column({ type: String, nullable: false, length: 60 }) password: string; + @Column({ type: String, nullable: false, length: 10 }) + telefono: string; + @Column({ type: String, nullable: false, length: 10 }) usuario: string; diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index 3a2c211..b688282 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -1,25 +1,42 @@ -import { Controller, Get, Post, Put } from '@nestjs/common'; +import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; import { UsuarioService } from './usuario.service'; +import { UsuarioEscolaresDto } from './dto/usuario-escolares.dto'; +import { UsuarioLoginDto } from './dto/usuario-login.dto'; +import { UsuarioRegistrarDto } from './dto/usuario-registrar.dto'; +import { UsuarioUpdateDto } from './dto/usuario-update.dto'; +import { UsuarioUsuariosDto } from './dto/usuario-usuarios.dto'; +import { UsuarioDto } from './dto/usuario.dto'; @Controller('usuario') export class UsuarioController { constructor(private usuarioService: UsuarioService) {} - @Get() - get() {} + /* Pendiente por conexión */ + @Get('escolares') + escolares(@Query() query: UsuarioEscolaresDto) {} @Post('login') - login() {} + login(@Body() body: UsuarioLoginDto) { + return this.usuarioService.login(body.usuario, body.password); + } @Post('registrar') - registrar() {} + registrar(@Body() body: UsuarioRegistrarDto) { + return this.usuarioService.registrar(body.id_usuario, body.telefono); + } @Put() - update() {} + update(@Body() body: UsuarioUpdateDto) { + return this.usuarioService.update(body); + } @Get('usuario') - usuario() {} + usuario(@Query() query: UsuarioDto) { + return this.usuarioService.findByUsuario(query.usuario); + } @Get('usuarios') - usuarios() {} + usuarios(@Query() query: UsuarioUsuariosDto) { + return this.usuarioService.findAll(query); + } } diff --git a/src/usuario/usuario.module.ts b/src/usuario/usuario.module.ts index 33fd4e9..c9c2b34 100644 --- a/src/usuario/usuario.module.ts +++ b/src/usuario/usuario.module.ts @@ -3,9 +3,15 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { UsuarioController } from './usuario.controller'; import { UsuarioService } from './usuario.service'; import { Usuario } from './entity/usuario.entity'; +import { InstitucionModule } from '../institucion/institucion.module'; +import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; @Module({ - imports: [TypeOrmModule.forFeature([Usuario])], + imports: [ + TypeOrmModule.forFeature([Usuario]), + InstitucionModule, + TipoUsuarioModule, + ], controllers: [UsuarioController], providers: [UsuarioService], }) diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index e901f0a..bb7604f 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -1,11 +1,81 @@ -import { Injectable } from '@nestjs/common'; +import { + Injectable, + NotFoundException, + UnauthorizedException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Usuario } from './entity/usuario.entity'; +import { InstitucionService } from '../institucion/institucion.service'; +import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; @Injectable() export class UsuarioService { constructor( @InjectRepository(Usuario) private repository: Repository, + private institucionService: InstitucionService, + private tipoUsuarioService: TipoUsuarioService, ) {} + + async findAll(filtros: { + pagina: string; + id_carrera?: string; + id_institucion?: string; + id_tipo_usuario?: string; + usuario?: string; + }) { + const institucion = filtros.id_institucion + ? this.institucionService.findById(Number(filtros.id_institucion)) + : null; + const tipoUsuario = filtros.id_tipo_usuario + ? this.tipoUsuarioService.findById(Number(filtros.id_tipo_usuario)) + : null; + const updtae = {}; + /* Terminar cuando se tengan las fuinciones faltantes */ + } + + findById(id_usuario: number) { + return this.repository.findOne({ id_usuario }).then((usuario) => { + if (!usuario) throw new NotFoundException('No existe este usuario.'); + return usuario; + }); + } + + findByUsuario(usuario: string) { + return this.repository.findOne({ usuario }).then((usuario) => { + if (!usuario) throw new NotFoundException('No existe este usuario.'); + return usuario; + }); + } + + login(usuario: string, password: string) { + return this.findByUsuario(usuario).then((usuario) => { + if (password !== usuario.password) + throw new UnauthorizedException('Contraseña incorrecta'); + /* Crear JWT y regresarlo */ + return usuario; + }); + } + + registrar(id_usuario: number, telefono: string) { + return this.findById(id_usuario) + .then((usuario) => { + usuario.telefono = telefono; + /* crear contraseña, encriptarla y mandarla por correo */ + usuario.password = 'hola'; + return this.repository.save(usuario); + }) + .then((_) => ({ message: 'Se creo correctamente un usuario.' })); + } + + async update(attrs: Partial) { + return this.findById(attrs.id_usuario) + .then((usuario) => { + Object.assign(usuario, attrs); + return this.repository.save(usuario); + }) + .then((_) => ({ + message: 'Se actualizo correctamente la información del usuario.', + })); + } } From 73129b313f22af88c72a1a80d3b3d9d178ac9b9b Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 20 Apr 2022 16:02:05 -0500 Subject: [PATCH 6/7] listo tipo usuario --- .../dto/tipo-usuario-update.dto.ts | 6 ++++++ src/tipo-usuario/tipo-usuario.controller.ts | 13 +++++++++--- src/tipo-usuario/tipo-usuario.service.ts | 21 ++++++++++++++++++- 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/tipo-usuario/dto/tipo-usuario-update.dto.ts diff --git a/src/tipo-usuario/dto/tipo-usuario-update.dto.ts b/src/tipo-usuario/dto/tipo-usuario-update.dto.ts new file mode 100644 index 0000000..8d6f793 --- /dev/null +++ b/src/tipo-usuario/dto/tipo-usuario-update.dto.ts @@ -0,0 +1,6 @@ +import { IsString } from 'class-validator'; + +export class TipoUsuarioUpdateDto { + @IsString() + tipo_usuario: string; +} diff --git a/src/tipo-usuario/tipo-usuario.controller.ts b/src/tipo-usuario/tipo-usuario.controller.ts index 2991699..38d6487 100644 --- a/src/tipo-usuario/tipo-usuario.controller.ts +++ b/src/tipo-usuario/tipo-usuario.controller.ts @@ -1,10 +1,17 @@ -import { Controller, Get } from '@nestjs/common'; +import { Body, Controller, Get, Post } from '@nestjs/common'; import { TipoUsuarioService } from './tipo-usuario.service'; - +import { TipoUsuarioUpdateDto } from './dto/tipo-usuario-update.dto'; @Controller('tipo-usuario') export class TipoUsuarioController { constructor(private tipoUsuarioService: TipoUsuarioService) {} + @Post() + create(@Body() body: TipoUsuarioUpdateDto) { + return this.tipoUsuarioService.create(body.tipo_usuario); + } + @Get() - get() {} + get() { + return this.tipoUsuarioService.findAll(); + } } diff --git a/src/tipo-usuario/tipo-usuario.service.ts b/src/tipo-usuario/tipo-usuario.service.ts index 722f206..6fec3d5 100644 --- a/src/tipo-usuario/tipo-usuario.service.ts +++ b/src/tipo-usuario/tipo-usuario.service.ts @@ -1,4 +1,8 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; +import { + ConflictException, + Injectable, + NotFoundException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { TipoUsuario } from './entity/tipo-usuario.entity'; @@ -9,6 +13,21 @@ export class TipoUsuarioService { @InjectRepository(TipoUsuario) private repository: Repository, ) {} + create(tipo_usuario: string) { + return this.repository + .findOne({ tipo_usuario }) + .then((existeTipoUsuario) => { + if (existeTipoUsuario) + throw new ConflictException('Ya existe este tipo usuario'); + return this.repository.save(this.repository.create({ tipo_usuario })); + }) + .then((_) => ({ message: 'Se creo correctamente el tipo usuario.' })); + } + + findAll() { + return this.repository.find(); + } + findById(id_tipo_usuario: number) { return this.repository.findOne({ id_tipo_usuario }).then((tipoUsuario) => { if (!tipoUsuario) From c52e5b7850aafe1b1dadd7d070856a663f91e8c4 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Wed, 20 Apr 2022 16:50:34 -0500 Subject: [PATCH 7/7] operador y usuario a medias --- src/operador/dto/operador-create.dto.ts | 12 +++ src/operador/dto/operador-login.dto.ts | 9 +++ src/operador/dto/operador-operadores.dto.ts | 14 ++++ src/operador/dto/operador-update.dto.ts | 18 +++++ src/operador/dto/operador.dto.ts | 6 ++ src/operador/operador.controller.ts | 32 ++++++-- src/operador/operador.module.ts | 8 +- src/operador/operador.service.ts | 85 ++++++++++++++++++++- src/usuario/usuario.service.ts | 3 +- 9 files changed, 177 insertions(+), 10 deletions(-) create mode 100644 src/operador/dto/operador-create.dto.ts create mode 100644 src/operador/dto/operador-login.dto.ts create mode 100644 src/operador/dto/operador-operadores.dto.ts create mode 100644 src/operador/dto/operador-update.dto.ts create mode 100644 src/operador/dto/operador.dto.ts diff --git a/src/operador/dto/operador-create.dto.ts b/src/operador/dto/operador-create.dto.ts new file mode 100644 index 0000000..2b7d147 --- /dev/null +++ b/src/operador/dto/operador-create.dto.ts @@ -0,0 +1,12 @@ +import { IsInt, IsString } from 'class-validator'; + +export class OperadorCreateDto { + @IsInt() + id_institucion: number; + + @IsString() + operador: string; + + @IsString() + password: string; +} diff --git a/src/operador/dto/operador-login.dto.ts b/src/operador/dto/operador-login.dto.ts new file mode 100644 index 0000000..9cc20e3 --- /dev/null +++ b/src/operador/dto/operador-login.dto.ts @@ -0,0 +1,9 @@ +import { IsNumberString, IsString } from 'class-validator'; + +export class OperadorLoginDto { + @IsNumberString() + operador: string; + + @IsString() + password: string; +} diff --git a/src/operador/dto/operador-operadores.dto.ts b/src/operador/dto/operador-operadores.dto.ts new file mode 100644 index 0000000..3d7e83d --- /dev/null +++ b/src/operador/dto/operador-operadores.dto.ts @@ -0,0 +1,14 @@ +import { IsNumberString, IsOptional, IsString } from 'class-validator'; + +export class OperadorOperadoresDto { + @IsNumberString() + pagina: string; + + @IsNumberString() + @IsOptional() + id_institucion?: string; + + @IsString() + @IsOptional() + operador?: string; +} diff --git a/src/operador/dto/operador-update.dto.ts b/src/operador/dto/operador-update.dto.ts new file mode 100644 index 0000000..a8fad9a --- /dev/null +++ b/src/operador/dto/operador-update.dto.ts @@ -0,0 +1,18 @@ +import { IsBoolean, IsInt, IsOptional, IsString } from 'class-validator'; + +export class OperadorUpdateDto { + @IsInt() + id_operador: number; + + @IsBoolean() + @IsOptional() + activo?: boolean; + + @IsString() + @IsOptional() + operador?: string; + + @IsString() + @IsOptional() + password?: string; +} diff --git a/src/operador/dto/operador.dto.ts b/src/operador/dto/operador.dto.ts new file mode 100644 index 0000000..eebc66e --- /dev/null +++ b/src/operador/dto/operador.dto.ts @@ -0,0 +1,6 @@ +import { IsString } from 'class-validator'; + +export class OperadorDto { + @IsString() + operador: string; +} diff --git a/src/operador/operador.controller.ts b/src/operador/operador.controller.ts index 225d2a4..faf7ac6 100644 --- a/src/operador/operador.controller.ts +++ b/src/operador/operador.controller.ts @@ -1,25 +1,43 @@ -import { Controller, Get, Post, Put } from '@nestjs/common'; +import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common'; import { OperadorService } from './operador.service'; - +import { OperadorCreateDto } from './dto/operador-create.dto'; +import { OperadorLoginDto } from './dto/operador-login.dto'; +import { OperadorOperadoresDto } from './dto/operador-operadores.dto'; +import { OperadorUpdateDto } from './dto/operador-update.dto'; +import { OperadorDto } from './dto/operador.dto'; @Controller('operador') export class OperadorController { constructor(private operadorService: OperadorService) {} @Post() - create() {} + create(@Body() body: OperadorCreateDto) { + return this.operadorService.create( + body.id_institucion, + body.operador, + body.password, + ); + } @Post('login') - login() {} + login(@Body() body: OperadorLoginDto) { + return this.operadorService.login(body.operador, body.password); + } @Get('operador') - operador() {} + operador(@Query() query: OperadorDto) { + return this.operadorService.findByOperador(query.operador); + } @Get('operadores') - operadores() {} + operadores(@Query() query: OperadorOperadoresDto) { + return this.operadorService.findAll(query); + } @Get('reporte') reporte() {} @Put() - update() {} + update(@Body() body: OperadorUpdateDto) { + return this.operadorService.update(body); + } } diff --git a/src/operador/operador.module.ts b/src/operador/operador.module.ts index b54e8dd..ef5df32 100644 --- a/src/operador/operador.module.ts +++ b/src/operador/operador.module.ts @@ -3,9 +3,15 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { OperadorController } from './operador.controller'; import { OperadorService } from './operador.service'; import { Operador } from './entity/operador.entity'; +import { InstitucionModule } from 'src/institucion/institucion.module'; +import { TipoUsuarioModule } from 'src/tipo-usuario/tipo-usuario.module'; @Module({ - imports: [TypeOrmModule.forFeature([Operador])], + imports: [ + TypeOrmModule.forFeature([Operador]), + InstitucionModule, + TipoUsuarioModule, + ], controllers: [OperadorController], providers: [OperadorService], }) diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 2a86d67..c39acfc 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -1,11 +1,94 @@ -import { Injectable } from '@nestjs/common'; +import { + ConflictException, + Injectable, + NotFoundException, + UnauthorizedException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Operador } from './entity/operador.entity'; +import { InstitucionService } from 'src/institucion/institucion.service'; +import { TipoUsuarioService } from 'src/tipo-usuario/tipo-usuario.service'; @Injectable() export class OperadorService { constructor( @InjectRepository(Operador) private repository: Repository, + private isnstitucionService: InstitucionService, + private tipoUsuarioService: TipoUsuarioService, ) {} + + async create(id_institucion: number, operador: string, password: string) { + const institucion = await this.isnstitucionService.findById(id_institucion); + const tipoUsuario = await this.tipoUsuarioService.findById(4); + + return this.repository + .findOne({ operador, institucion }) + .then((existeOperador) => { + if (existeOperador) + throw new ConflictException( + 'Ya existe un operador con ese nombre, intente de nuevo.', + ); + /* Encriptar password */ + return this.repository.save( + this.repository.create({ + institucion, + operador, + password, + tipoUsuario, + }), + ); + }) + .then((_) => ({ message: 'Se creo correctamente al operador.' })); + } + + async findAll(filtros: { + pagina: string; + id_institucion?: string; + operador?: string; + }) { + const busqueda: any = {}; + const institucion = filtros.id_institucion + ? await this.isnstitucionService.findById(Number(filtros.id_institucion)) + : null; + + if (filtros.operador) busqueda.operador = filtros.operador; + if (filtros.id_institucion) busqueda.institucion = institucion; + return this.repository.find(busqueda); + } + + findById(id_operador: number) { + return this.repository.findOne({ id_operador }).then((operador) => { + if (!operador) throw new NotFoundException('No existe este operador'); + return operador; + }); + } + + findByOperador(operador: string) { + return this.repository.findOne({ operador }).then((operador) => { + if (!operador) throw new NotFoundException('No existe este operador'); + return operador; + }); + } + + login(operador: string, password: string) { + return this.findByOperador(operador).then((operador) => { + if (operador.password !== password) + throw new UnauthorizedException('Contraseña incorrecta.'); + /* Crear JWT y regresarlo */ + return operador; + }); + } + + async update(attrs: Partial) { + return this.findById(attrs.id_operador) + .then((operador) => { + /* encriptar password */ + Object.assign(operador, attrs); + return this.repository.save(operador); + }) + .then((_) => ({ + message: 'Se actualizo correctamente la información del operador.', + })); + } } diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts index bb7604f..179f3f3 100644 --- a/src/usuario/usuario.service.ts +++ b/src/usuario/usuario.service.ts @@ -51,7 +51,7 @@ export class UsuarioService { login(usuario: string, password: string) { return this.findByUsuario(usuario).then((usuario) => { if (password !== usuario.password) - throw new UnauthorizedException('Contraseña incorrecta'); + throw new UnauthorizedException('Contraseña incorrecta.'); /* Crear JWT y regresarlo */ return usuario; }); @@ -71,6 +71,7 @@ export class UsuarioService { async update(attrs: Partial) { return this.findById(attrs.id_usuario) .then((usuario) => { + /* crear y encriptar password en caso de cambio de password */ Object.assign(usuario, attrs); return this.repository.save(usuario); })