Se agregaron los perifericos

This commit is contained in:
2025-10-30 10:08:23 -06:00
parent 332575a8e1
commit 14ac2bd0d1
10 changed files with 129 additions and 121 deletions
Binary file not shown.
Binary file not shown.
+10 -69
View File
@@ -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",
+1 -1
View File
@@ -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",
+10 -7
View File
@@ -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,
};
}
}
+13 -1
View File
@@ -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;
}
+12
View File
@@ -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[];
}
+5
View File
@@ -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;
}
+8
View File
@@ -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();
}
}
+70 -43
View File
@@ -41,6 +41,9 @@ export class EquipoService {
@InjectRepository(Procesador)
private readonly procesadorRepo: Repository<Procesador>,
@InjectRepository(Equipo)
private readonly perifericoRepo: Repository<Equipo>,
) {}
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();
}
}