From 40618970a52b3b9ada0cd65ed0b9db670d9603c8 Mon Sep 17 00:00:00 2001 From: lemuel Date: Tue, 10 Jan 2023 17:25:23 -0600 Subject: [PATCH] listo logo peronalizado --- .gitignore | 1 + src/auth/auth.service.ts | 5 +- src/auth/dto/jwt-payload-admin.ts | 2 +- src/auth/dto/jwt-payload-operador.ts | 2 +- src/institucion/institucion.service.ts | 6 +- src/main.ts | 7 +- src/operador/entity/operador.entity.ts | 4 +- .../views/full-informacion-operador.view.ts | 6 +- src/operador/operador.service.ts | 73 +++++++++---------- src/upload-file/upload-file.controller.ts | 27 +------ src/upload-file/upload-file.service.ts | 6 -- 11 files changed, 58 insertions(+), 81 deletions(-) diff --git a/.gitignore b/.gitignore index 907c122..8c5ed4b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .env pcpuma_unam.sql /upload/* +/public/* # compiled output /dist diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index c2afa47..b522e0a 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -40,9 +40,10 @@ export class AuthService { }; // Los super admin y sistema no tienen institución - if (JwtPayload.Operador.tipoUsuario.id_tipo_usuario > 2) + if (JwtPayload.Operador.tipoUsuario.id_tipo_usuario === 3) JwtPayload.Operador.institucion = { id_institucion: admin.institucion.id_institucion, + logo: admin.institucion.logo, }; return { token: this.jwtService.sign(JwtPayload) }; // "Firmamos"/creamos el token }); @@ -69,6 +70,7 @@ export class AuthService { nombre: operador.nombre, institucion: { id_institucion: operador.institucion.id_institucion, + logo: operador.institucion.logo, }, tipoUsuario: { id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario, @@ -76,6 +78,7 @@ export class AuthService { }, Modulo: { id_modulo: modulo.id_modulo }, }; + return { token: this.jwtService.sign(JwtPayload) }; // "Firmamos"/creamos el token }); } diff --git a/src/auth/dto/jwt-payload-admin.ts b/src/auth/dto/jwt-payload-admin.ts index f7bb660..9c8b212 100644 --- a/src/auth/dto/jwt-payload-admin.ts +++ b/src/auth/dto/jwt-payload-admin.ts @@ -3,7 +3,7 @@ export interface JwtPayloadAdmin { id_operador: number; nombre: string; operador: string; - institucion?: { id_institucion: number }; + institucion?: { id_institucion: number; logo: string }; tipoUsuario: { id_tipo_usuario: number }; }; } diff --git a/src/auth/dto/jwt-payload-operador.ts b/src/auth/dto/jwt-payload-operador.ts index 32b71fb..c3558e8 100644 --- a/src/auth/dto/jwt-payload-operador.ts +++ b/src/auth/dto/jwt-payload-operador.ts @@ -3,7 +3,7 @@ export interface JwtPayloadOperador { id_operador: number; nombre: string; operador: string; - institucion: { id_institucion: number }; + institucion: { id_institucion: number; logo: string }; tipoUsuario: { id_tipo_usuario: number }; }; Modulo: { id_modulo: number }; diff --git a/src/institucion/institucion.service.ts b/src/institucion/institucion.service.ts index 8671973..11d9c45 100644 --- a/src/institucion/institucion.service.ts +++ b/src/institucion/institucion.service.ts @@ -20,9 +20,9 @@ export class InstitucionService { @InjectRepository(Institucion) private repository: Repository, ) {} - crearInstitucion(id_institucion: number): Institucion { - return this.repository.create({ id_institucion }); - } + // crearInstitucion(id_institucion: number): Institucion { + // return this.repository.create({ id_institucion }); + // } findAll(): Promise { return this.repository.find({ select: ['id_institucion'] }); diff --git a/src/main.ts b/src/main.ts index 977eb75..c278783 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,10 +1,12 @@ +import { join } from 'path'; import { NestFactory } from '@nestjs/core'; +import { NestExpressApplication } from '@nestjs/platform-express'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { ValidationPipe } from '@nestjs/common'; import { AppModule } from './app.module'; async function bootstrap() { - const app = await NestFactory.create(AppModule) + const app = await NestFactory.create(AppModule); // const config = new DocumentBuilder() // .setTitle('pcpuma_unam_api') // .setDescription('Api de Pc puma') @@ -16,6 +18,9 @@ async function bootstrap() { // SwaggerModule.setup('/api', app, document); app.useGlobalPipes(new ValidationPipe({ whitelist: true })); app.enableCors(); + app.useStaticAssets(join(__dirname, '..', 'public'), { + prefix: '/public/', + }); await app.listen(process.env.API_PORT); } bootstrap(); diff --git a/src/operador/entity/operador.entity.ts b/src/operador/entity/operador.entity.ts index 28d40cc..ce1549c 100644 --- a/src/operador/entity/operador.entity.ts +++ b/src/operador/entity/operador.entity.ts @@ -40,7 +40,9 @@ export class Operador { @Column({ type: Number, nullable: true }) id_tipo_usuario: number; - @ManyToOne(() => Institucion, (institucion) => institucion.operadores) + @ManyToOne(() => Institucion, (institucion) => institucion.operadores, { + eager: true, + }) @JoinColumn({ name: 'id_institucion' }) institucion: Institucion; diff --git a/src/operador/entity/views/full-informacion-operador.view.ts b/src/operador/entity/views/full-informacion-operador.view.ts index e844194..5392a92 100644 --- a/src/operador/entity/views/full-informacion-operador.view.ts +++ b/src/operador/entity/views/full-informacion-operador.view.ts @@ -16,6 +16,7 @@ import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity'; .addSelect('o.operador', 'operador') .addSelect('o.password', 'password') .addSelect('i.institucion', 'institucion') + .addSelect('i.logo', 'logo') .addSelect('tu.tipo_usuario', 'tipo_usuario') .from(Operador, 'o') .innerJoin(Institucion, 'i', 'i.id_institucion = o.id_institucion') @@ -31,6 +32,9 @@ export class FullInformacionOperadorView { @ViewColumn() activo: number; + @ViewColumn() + correo: string; + @ViewColumn() id_institucion: number; @@ -41,7 +45,7 @@ export class FullInformacionOperadorView { institucion: string; @ViewColumn() - correo: string; + logo: string; @ViewColumn() nombre: string; diff --git a/src/operador/operador.service.ts b/src/operador/operador.service.ts index 2892c5c..692a8f3 100644 --- a/src/operador/operador.service.ts +++ b/src/operador/operador.service.ts @@ -93,14 +93,9 @@ export class OperadorService { } findAdmin(admin: string): Promise { - return this.repository - .findOne({ - where: { - operador: admin, - tipoUsuario: { id_tipo_usuario: Between(2, 3) }, - }, - }) - .then((admin) => this.llenarIds(admin)); + return this.fullInformacionOperadorView + .findOne({ where: { operador: admin, id_tipo_usuario: Between(2, 3) } }) + .then((infoOperador) => this.fullViewToOperador(infoOperador)); } async findAll( @@ -140,23 +135,7 @@ export class OperadorService { const operadores: Operador[] = []; for (let i = 0; i < infoOperadores[0].length; i++) - operadores.push( - this.repository.create({ - id_operador: infoOperadores[0][i].id_operador, - activo: infoOperadores[0][i].activo === 1, - correo: infoOperadores[0][i].correo, - nombre: infoOperadores[0][i].nombre, - operador: infoOperadores[0][i].operador, - institucion: { - id_institucion: infoOperadores[0][i].id_operador, - institucion: infoOperadores[0][i].institucion, - }, - tipoUsuario: { - id_tipo_usuario: infoOperadores[0][i].id_tipo_usuario, - tipo_usuario: infoOperadores[0][i].tipo_usuario, - }, - }), - ); + operadores.push(this.fullViewToOperador(infoOperadores[0][i])); return [operadores, infoOperadores[1]]; }); } @@ -185,29 +164,43 @@ export class OperadorService { .then((operador) => { if (!operador) throw new NotFoundException('No existe este id operador.'); - return this.llenarIds(operador); + operador.tipoUsuario = this.tipoUsuarioService.crearTipoUsuario( + operador.id_tipo_usuario, + ); + return operador; }); } findOperador(institucion: Institucion, operador: string): Promise { - return this.repository + return this.fullInformacionOperadorView .findOne({ - where: { operador, institucion, tipoUsuario: { id_tipo_usuario: 4 } }, + where: { + id_institucion: institucion.id_institucion, + id_tipo_usuario: 4, + operador, + }, }) - .then((operador) => this.llenarIds(operador)); + .then((infoOperador) => this.fullViewToOperador(infoOperador)); } - llenarIds(operador: Operador): Operador { - if (operador) { - operador.tipoUsuario = this.tipoUsuarioService.crearTipoUsuario( - operador.id_tipo_usuario, - ); - if (operador.id_institucion) - operador.institucion = this.institucionService.crearInstitucion( - operador.id_institucion, - ); - } - return operador; + fullViewToOperador(infoOperador: FullInformacionOperadorView): Operador { + return this.repository.create({ + id_operador: infoOperador.id_operador, + activo: infoOperador.activo === 1, + correo: infoOperador.correo, + nombre: infoOperador.nombre, + operador: infoOperador.operador, + password: infoOperador.password, + institucion: { + id_institucion: infoOperador.id_institucion, + institucion: infoOperador.institucion, + logo: infoOperador.logo, + }, + tipoUsuario: { + id_tipo_usuario: infoOperador.id_tipo_usuario, + tipo_usuario: infoOperador.tipo_usuario, + }, + }); } passwordReset( diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts index 41707d8..6771b3d 100644 --- a/src/upload-file/upload-file.controller.ts +++ b/src/upload-file/upload-file.controller.ts @@ -75,37 +75,12 @@ export class UploadFileController { return this.uploadFileService.createUsuarios(path, admin); } - @Get('download-logo') - @UseGuards(AuthGuard('jwt')) - @ApiBearerAuth('jwt') - downloadLogo(@Request() req, @Response() res) { - const operador: Operador = req.user.operador; - - this.validarUsuarioService.validarAdminOperador(operador); - return this.uploadFileService.downloadLogo(operador).then((logo) => { - if (logo) res.download(logo); - else return false; - }); - } - @Serealize(MessageOutputDto) @Post('upload-logo') @UseGuards(AuthGuard('jwt')) @UseInterceptors( FileInterceptor('logo', { - storage: multer.diskStorage({ - destination: './upload', - filename: (req: any, file, cb) => { - cb( - null, - `${ - req.user.operador.institucion.id_institucion - }${Date.now()}${Math.round( - Math.random() * 1e9, - )}${file.originalname.slice(-4)}`, - ); - }, - }), + storage: multer.diskStorage({ destination: './public' }), }), ) @ApiBearerAuth('jwt') diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index de1001f..95d0d60 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -106,12 +106,6 @@ export class UploadFileService { return { message: 'Se subió y cargó correctamente tu archivo csv.' }; } - downloadLogo(operador: Operador): Promise { - return this.institucionService - .findById(operador.institucion.id_institucion) - .then((institucion) => institucion.logo); - } - errorBase(index): string { return `Se saltó la linea ${ index + 2