From 14ac2bd0d18782a6a19d22ef2df0a508a1e7a0c6 Mon Sep 17 00:00:00 2001 From: Emilio Date: Thu, 30 Oct 2025 10:08:23 -0600 Subject: [PATCH] Se agregaron los perifericos --- mariadb/aria_log.00000001 | Bin 4923392 -> 4931584 bytes mariadb/aria_log_control | Bin 52 -> 52 bytes package-lock.json | 79 ++-------------- package.json | 2 +- src/auth/auth.service.ts | 17 ++-- src/equipo/dto/create-equipo.dto.ts | 14 ++- src/equipo/entities/catalogo.entities.ts | 12 +++ src/equipo/entities/equipo.entity.ts | 5 + src/equipo/equipo.controller.ts | 8 ++ src/equipo/equipo.service.ts | 113 ++++++++++++++--------- 10 files changed, 129 insertions(+), 121 deletions(-) diff --git a/mariadb/aria_log.00000001 b/mariadb/aria_log.00000001 index 5e7e9763ec7b9c975ad6f2e58232ec4ecde0278e..ecd2a93d484c41fa2a29394e28ae6e4649640678 100644 GIT binary patch delta 4999 zcmZA3e{{`t9LMo(Wj14n0!!XPxNz!O(X{Y0KoN_vj<8-8*&iizn zju3JsNm^POp(SZ)Ns<_8u_V8emZT+VX(@RfJdgePc`Rn-Q+D)Tiz z>tO!Y(E=>cf-Kk^7Gh3wncF&9sD)X$MOdUoS+vDiti@Tpb+!acv?NQm6zgKCmS*YJ z)iSJ`WmXrIVZ z!mztbHkS6OYz}R=teW>zEAtey6`EHfOtdu0=8U&yLx`((AW{jz3Sqs%`78wX^$ zw1cv8+LyBVv_rBw+E=oZv?iG|61!i^3TTIAm9!(W#k6KwJ?$G=3+<>ZG77uj%8F^n zWHV^r$yU&g%XZOD$XaP9WeL&PJtZrpotDj_eJ@)>J0sgi`$5)5J1a|%!S0W;@w67% zT-r~v8rnHo6YXc2Pb@ah%d%;|$jWFJWJdc{wu#m%J4X9W78Hlwi?Tf0@3IQoCD{Vn zAF^$<%d#`HKV_lu*lm*)(f*Q6r(KaPqx~&wptZ}+)BcggcE;}2>lR#c!@NVwTyfsV z4tqkJH|YP5A8%MnY?Sw@{T_#V72Vex_GCb$!X5@cgi8z^6q1j4LR<+r#2*jFGIT_k z!w`T_%@C+?;P#0iJZR^GV1&#>9OXcm$PjWfgt+L=o9=MeGPn?$8Qci|N!aeBkkfeW zA4LzvgK~y2g!v5N2z3k*3MX!#h{OYDGH!}OC}4<2sAPyySajgpUqO$>gL;OzTOp=} zA-=<8KOf&~U*iqlQ~7z(`aVxe!F8Q)J#~8+5)fuHBqFS3NJ402NJhBAkb;oW1y^-J zn81*VFpnV(VLd}S!eNH42!5#;&p_zK&<$YA>> z5vDQpLRiRzk!vusK40j`(W0;5#orSCJK^Vp`3E@$Odl6PLlp*Y9n2d0dVG2T04_tL0 zf`_3TVK&442x}RpA~Z5QfN+JO0wE(CS3QU@fngfLJcfr5)-zOI4@+mJ1TS?Ixi%L^ GMf?XZG>j_% delta 170 zcmV~$SvEoe007YADX&ySNf{$U8A2H{^_nQz)cd%5u!($hjs;kfCAc?^zk~R97Q_|= z79}Jt38kbh%gD-Eu_|xPx`Lt&C7a4Bwrtz6YtO!_1BYsk96NEUuHnqN3zwR%T)WZI pcI(c)2OW=|JbUq~E7H?9Ff{V!-Ppv3>CfjZ{Q8Sh`FU?t{s)=PIr;zq diff --git a/mariadb/aria_log_control b/mariadb/aria_log_control index b7d38e42542b4a681e3246d2d73eed76af812d1c..53f10be5f2ef0ad36e205836c71bfc78f653eeab 100644 GIT binary patch delta 27 gcmXppnII?j>x9u7Mh1peI^GOGiXnv=NH8z}0B2zZR{#J2 delta 27 fcmXppnII=N>GO6gMh1okc5enC#n8h9Bp4U~V0;Ay diff --git a/package-lock.json b/package-lock.json index 3997374..f1f989b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,8 @@ "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.0.1", "@nestjs/typeorm": "^11.0.0", - "argon2": "^0.44.0", "axios": "^1.13.1", + "bcryptjs": "^3.0.2", "class-transformer": "0.5.1", "class-validator": "0.14.2", "mysql2": "^3.15.2", @@ -795,12 +795,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@epic-web/invariant": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", - "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", - "license": "MIT" - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", @@ -2693,15 +2687,6 @@ "@noble/hashes": "^1.1.5" } }, - "node_modules/@phc/format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", - "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4124,22 +4109,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/argon2": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.44.0.tgz", - "integrity": "sha512-zHPGN3S55sihSQo0dBbK0A5qpi2R31z7HZDZnry3ifOyj8bZZnpZND2gpmhnRGO1V/d555RwBqIK5W4Mrmv3ig==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@phc/format": "^1.0.0", - "cross-env": "^10.0.0", - "node-addon-api": "^8.5.0", - "node-gyp-build": "^4.8.4" - }, - "engines": { - "node": ">=16.17.0" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4337,6 +4306,15 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/bcryptjs": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz", + "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==", + "license": "BSD-3-Clause", + "bin": { + "bcrypt": "bin/bcrypt" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -5042,23 +5020,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/cross-env": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", - "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", - "license": "MIT", - "dependencies": { - "@epic-web/invariant": "^1.0.0", - "cross-spawn": "^7.0.6" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=20" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -8358,15 +8319,6 @@ "dev": true, "license": "MIT" }, - "node_modules/node-addon-api": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", - "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", - "license": "MIT", - "engines": { - "node": "^18 || ^20 || >= 21" - } - }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -8377,17 +8329,6 @@ "lodash": "^4.17.21" } }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", diff --git a/package.json b/package.json index ab38a3e..9cade09 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.0.1", "@nestjs/typeorm": "^11.0.0", - "argon2": "^0.44.0", "axios": "^1.13.1", + "bcryptjs": "^3.0.2", "class-transformer": "0.5.1", "class-validator": "0.14.2", "mysql2": "^3.15.2", diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 4e019f7..bac9631 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -5,7 +5,7 @@ import { InternalServerErrorException, } from '@nestjs/common'; import { UsuariosService } from 'src/usuarios/usuarios.service'; -import * as argon2 from 'argon2'; +import * as bcrypt from 'bcryptjs'; import { LoginDto } from './dto/login.dto'; import { CreateUsuarioDto } from 'src/usuarios/dto/create-usuario.dto'; import { JwtService } from '@nestjs/jwt'; @@ -24,7 +24,8 @@ export class AuthService { } try { - const hashedContraseña = await argon2.hash(contraseña); + const salt = await bcrypt.genSalt(10); + const hashedContraseña = await bcrypt.hash(contraseña, salt); await this.usuarioService.create({ nombre, @@ -46,23 +47,25 @@ export class AuthService { throw new UnauthorizedException('Usuario no encontrado'); } - const contraseñaValida = await argon2.verify( - usuario.contraseña, + const contraseñaValida = await bcrypt.compare( contraseña, + usuario.contraseña, ); if (!contraseñaValida) { - throw new UnauthorizedException('Contraseña invalida'); + throw new UnauthorizedException('Contraseña inválida'); } + const dataUser = { id: usuario.id_usuario, nombre: usuario.nombre, tipoUsuario: usuario.tipoUsuario.id_tipo_usuario, }; - const token = await this.jwtService.sign(dataUser); + const token = this.jwtService.sign(dataUser); + return { - token: token, + token, }; } } diff --git a/src/equipo/dto/create-equipo.dto.ts b/src/equipo/dto/create-equipo.dto.ts index 6190df3..4c4a23a 100644 --- a/src/equipo/dto/create-equipo.dto.ts +++ b/src/equipo/dto/create-equipo.dto.ts @@ -1,4 +1,10 @@ -import { IsString, IsOptional, IsDateString, IsInt } from 'class-validator'; +import { + IsString, + IsOptional, + IsDateString, + IsInt, + IsNotEmpty, +} from 'class-validator'; export class CreateEquipoDto { @IsString() @@ -39,4 +45,10 @@ export class CreateEquipoDto { @IsInt() id_marca: number; + + @IsInt() + id_periferico: number; + + @IsNotEmpty() + isImpresora: Boolean; } diff --git a/src/equipo/entities/catalogo.entities.ts b/src/equipo/entities/catalogo.entities.ts index 5a16b03..6b3e3ec 100644 --- a/src/equipo/entities/catalogo.entities.ts +++ b/src/equipo/entities/catalogo.entities.ts @@ -83,3 +83,15 @@ export class Procesador { @OneToMany(() => Equipo, (equipo) => equipo.procesador) equipo: Equipo[]; } + +@Entity() +export class Periferico { + @PrimaryGeneratedColumn() + id_periferico: number; + + @Column() + periferico: string; + + @OneToMany(() => Equipo, (equipo) => equipo.periferico) + equipo: Equipo[]; +} diff --git a/src/equipo/entities/equipo.entity.ts b/src/equipo/entities/equipo.entity.ts index b856799..3bc6983 100644 --- a/src/equipo/entities/equipo.entity.ts +++ b/src/equipo/entities/equipo.entity.ts @@ -10,6 +10,7 @@ import { Adscripcion, Estado, Marca, + Periferico, Procesador, SistemaOperativo, TipoEquipo, @@ -75,4 +76,8 @@ export class Equipo { @JoinColumn({ name: 'id_marca' }) @ManyToOne(() => Marca, (marca) => marca.equipo) marca: Marca; + + @JoinColumn({ name: 'id_periferico' }) + @ManyToOne(() => Periferico, (Periferico) => Periferico.equipo) + periferico: Periferico; } diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 430f2de..8105d17 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -60,11 +60,13 @@ export class EquipoController { findMarcas() { return this.equipoService.findAllMarcas(); } + @UseGuards(AuthGuard('jwt')) @Get('estados') findEstados() { return this.equipoService.findAllEstados(); } + @UseGuards(AuthGuard('jwt')) @Get('adscripciones') findAdscripciones() { @@ -85,4 +87,10 @@ export class EquipoController { findProcesadores() { return this.equipoService.findAllProcesadores(); } + + @UseGuards(AuthGuard('jwt')) + @Get('perifericos') + findPerifericos() { + return this.equipoService.findAllPPerifericos(); + } } diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 5755257..f2b21c5 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -41,6 +41,9 @@ export class EquipoService { @InjectRepository(Procesador) private readonly procesadorRepo: Repository, + + @InjectRepository(Equipo) + private readonly perifericoRepo: Repository, ) {} async buscarEquipos(filtros: any, page: number = 1, limit: number = 10) { @@ -159,6 +162,7 @@ export class EquipoService { 'sistemaOperativo', 'procesador', 'tipoUso', + 'periferico', ], }); @@ -173,34 +177,6 @@ export class EquipoService { return { ...equipo, ...responsable }; } - findAllUsos() { - return this.usoRepo.find(); - } - - findAllMarcas() { - return this.marcaRepo.find(); - } - - findAllEstados() { - return this.estadoRepo.find(); - } - - findAllAdscripciones() { - return this.adscripcionRepo.find(); - } - - findAllTiposEquipo() { - return this.tipoEquipoRepo.find(); - } - - findAllSistemasOperativos() { - return this.sistemaOperativoRepo.find(); - } - - findAllProcesadores() { - return this.procesadorRepo.find(); - } - async searchResponsable(nombreAdscripcion: string) { const adscripcion = await this.adscripcionRepo.findOneBy({ adscripcion: nombreAdscripcion, @@ -224,22 +200,73 @@ export class EquipoService { } create(equipo: CreateEquipoDto) { - const nuevoEquipo = this.equipoRepository.create({ - inventario: equipo.inventario, - serie: equipo.serie, - lugar: equipo.lugar, - fechaFactura: equipo.fechaFactura, - antiguedad: equipo.antiguedad, - modelo: equipo.modelo, - estado: { id_estado: equipo.id_estado }, - adscripcion: { id_adscripcion: equipo.id_adscripcion }, - tipoEquipo: { id_tipo_de_equipo: equipo.id_tipo_equipo }, - sistemaOperativo: { id_sistema_operativo: equipo.id_sistema_operativo }, - procesador: { id_procesador: equipo.id_procesador }, - tipoUso: { id_tipo_uso: equipo.id_uso }, - marca: { id_marca: equipo.id_marca }, - }); + let nuevoEquipo; + + if (equipo.isImpresora) { + nuevoEquipo = this.equipoRepository.create({ + inventario: equipo.inventario, + serie: equipo.serie, + lugar: equipo.lugar, + fechaFactura: equipo.fechaFactura, + antiguedad: equipo.antiguedad, + modelo: equipo.modelo, + estado: { id_estado: equipo.id_estado }, + adscripcion: { id_adscripcion: equipo.id_adscripcion }, + tipoEquipo: { id_tipo_de_equipo: equipo.id_tipo_equipo }, + tipoUso: { id_tipo_uso: equipo.id_uso }, + marca: { id_marca: equipo.id_marca }, + periferico: { id_periferico: equipo.id_periferico }, + }); + } else { + nuevoEquipo = this.equipoRepository.create({ + inventario: equipo.inventario, + serie: equipo.serie, + lugar: equipo.lugar, + fechaFactura: equipo.fechaFactura, + antiguedad: equipo.antiguedad, + modelo: equipo.modelo, + estado: { id_estado: equipo.id_estado }, + adscripcion: { id_adscripcion: equipo.id_adscripcion }, + tipoEquipo: { id_tipo_de_equipo: equipo.id_tipo_equipo }, + sistemaOperativo: { id_sistema_operativo: equipo.id_sistema_operativo }, + tipoUso: { id_tipo_uso: equipo.id_uso }, + marca: { id_marca: equipo.id_marca }, + procesador: { id_procesador: equipo.id_procesador }, + }); + } return this.equipoRepository.save(nuevoEquipo); } + + async findAllUsos() { + return await this.usoRepo.find(); + } + + async findAllMarcas() { + return await this.marcaRepo.find(); + } + + async findAllEstados() { + return await this.estadoRepo.find(); + } + + async findAllAdscripciones() { + return await this.adscripcionRepo.find(); + } + + async findAllTiposEquipo() { + return await this.tipoEquipoRepo.find(); + } + + async findAllSistemasOperativos() { + return await this.sistemaOperativoRepo.find(); + } + + async findAllProcesadores() { + return await this.procesadorRepo.find(); + } + + async findAllPPerifericos() { + return await this.perifericoRepo.find(); + } }