From e2afc63e28db4ebcbedd2862dd475877d23b3ef2 Mon Sep 17 00:00:00 2001 From: JorgeMike Date: Mon, 26 Jun 2023 08:33:18 -0600 Subject: [PATCH] Muchos cambios --- package-lock.json | 48 +++++- package.json | 1 + .../carrusel/{carrusel2.jpg => carrusel1.jpg} | Bin src/app.module.ts | 5 +- src/auth/auth.service.ts | 8 +- src/carousel/carousel.controller.ts | 92 ----------- src/carousel/carousel.service.ts | 9 -- src/email/DisenoConstancia.pdf | Bin 0 -> 79897 bytes src/email/email.controller.ts | 26 +++- src/email/email.module.ts | 7 +- src/email/email.service.ts | 146 ++++++++++++------ src/eventos/eventos.controller.ts | 10 +- src/eventos/eventos.service.ts | 2 +- 13 files changed, 184 insertions(+), 170 deletions(-) rename public/carrusel/{carrusel2.jpg => carrusel1.jpg} (100%) delete mode 100644 src/carousel/carousel.controller.ts delete mode 100644 src/carousel/carousel.service.ts create mode 100644 src/email/DisenoConstancia.pdf diff --git a/package-lock.json b/package-lock.json index 21ca84b..eb25f65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "blob-stream": "^0.1.3", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "date-fns": "^2.30.0", "exceljs": "^4.3.0", "moment": "^2.29.4", "multer": "^1.4.5-lts.1", @@ -745,6 +746,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", @@ -4212,9 +4224,12 @@ "dev": true }, "node_modules/date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, "engines": { "node": ">=0.11" }, @@ -8919,6 +8934,11 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -11784,6 +11804,14 @@ "@babel/helper-plugin-utils": "^7.19.0" } }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, "@babel/template": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", @@ -14464,9 +14492,12 @@ "dev": true }, "date-fns": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", - "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "requires": { + "@babel/runtime": "^7.21.0" + } }, "dayjs": { "version": "1.11.7", @@ -18066,6 +18097,11 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", diff --git a/package.json b/package.json index d3d3bd6..655206f 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "blob-stream": "^0.1.3", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "date-fns": "^2.30.0", "exceljs": "^4.3.0", "moment": "^2.29.4", "multer": "^1.4.5-lts.1", diff --git a/public/carrusel/carrusel2.jpg b/public/carrusel/carrusel1.jpg similarity index 100% rename from public/carrusel/carrusel2.jpg rename to public/carrusel/carrusel1.jpg diff --git a/src/app.module.ts b/src/app.module.ts index 98eab76..52a4042 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -46,8 +46,6 @@ import { EmailService } from './email/email.service'; import { EmailController } from './email/email.controller'; import { EmailModule } from './email/email.module'; import { MulterModule } from '@nestjs/platform-express'; -import { CarouselController } from './carousel/carousel.controller'; -import { CarouselService } from './carousel/carousel.service'; import { ServeStaticModule } from '@nestjs/serve-static'; import { join } from 'path'; import { CarruselModule } from './carrusel/carrusel.module'; @@ -128,9 +126,8 @@ import { Carrusel } from './entities/carrusel.entity'; AppController, ParticipanteController, InscripcionStatusController, - CarouselController, ], - providers: [AppService, InscripcionStatusService, CarouselService], + providers: [AppService, InscripcionStatusService], }) export class AppModule { static port: number; diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 2943e37..5b2b25a 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -54,9 +54,11 @@ export class AuthService { /* console.log(token); */ const data = { - usuario: usuario.nombre, - id: usuario.id_miembro, - email: usuario.email, + user: { + usuario: usuario.nombre, + id: usuario.id_miembro, + email: usuario.email, + }, token, }; diff --git a/src/carousel/carousel.controller.ts b/src/carousel/carousel.controller.ts deleted file mode 100644 index 3f670d0..0000000 --- a/src/carousel/carousel.controller.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { - BadRequestException, - Controller, - Delete, - Get, - HttpException, - HttpStatus, - Param, - Post, - Res, - UploadedFile, - UseInterceptors, -} from '@nestjs/common'; -import { FileInterceptor } from '@nestjs/platform-express'; -import { Response } from 'express'; -import * as fs from 'fs'; -import { diskStorage } from 'multer'; -import * as path from 'path'; - -@Controller('carousel') -export class CarouselController { - private images: string[] = []; - - @Post('/imagenes') - @UseInterceptors( - FileInterceptor('file', { - storage: diskStorage({ - destination: './public', - filename: function (req, file, cb) { - const directory = './public'; - const filePath = `${directory}/${file.originalname}`; - if (fs.existsSync(filePath)) { - cb( - new BadRequestException( - `Ya existe un archivo con el nombre: '${file.originalname}'. Si está seguro de que no es el mismo, cambie el nombre del archivo.`, - ), - null, - ); - } else { - cb(null, file.originalname); - } - }, - }), - fileFilter: function (req, file, cb) { - const filetypes = /jpeg|jpg|webp|png/; - const extname = filetypes.test( - path.extname(file.originalname).toLowerCase(), - ); - const mimetype = filetypes.test(file.mimetype); - if (mimetype && extname) { - return cb(null, true); - } - cb( - new BadRequestException( - 'Lo sentimos, para mejorar la calidad de las imagenes en el carousel solo se aceptan imagenes con terminación: .jpeg .jpg .png .webp', - ), - false, - ); - }, - }), - ) - async addImage(@UploadedFile() file) { - return { msg: 'Imagen guardada con exito :)' }; - } - - @Delete('/imagenes/:nombreArchivo') - async deleteImage(@Param('nombreArchivo') nombreArchivo: string) { - try { - await fs.promises.unlink(`./public/${nombreArchivo}`); - return { message: 'Imagen eliminada exitosamente' }; - } catch (err) { - throw new Error('Error al eliminar la imagen'); - } - } - - @Get('/imagenes') - async getImages(@Res() res: Response) { - // Leer el directorio 'public' para obtener el nombre de todos los archivos - - const fileNames = await fs.promises.readdir('./public'); - // Generar la URL para cada archivo y agregarla a un arreglo - - // Filtrar solo las imágenes con las terminaciones "jpg", "webp" y "png" - const imageNames = fileNames.filter((fileName) => - ['.jpg', '.webp', '.png'].includes(path.extname(fileName)), - ); - - const imageUrls = imageNames.map((imageName) => `public/${imageName}`); - // Devolver el arreglo de URLs como respuesta - return res.json(imageUrls); - } -} diff --git a/src/carousel/carousel.service.ts b/src/carousel/carousel.service.ts deleted file mode 100644 index a6c6fbb..0000000 --- a/src/carousel/carousel.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class CarouselService { - - uploadImage(file){ - /* console.log(file) */ - } -} diff --git a/src/email/DisenoConstancia.pdf b/src/email/DisenoConstancia.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5918a99bbcd23843b065863ccfb4bc3d0dcce180 GIT binary patch literal 79897 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 L4g { - return this.emailService.sendEmail(id, emailDto); + return this.emailService.sendEmail(id, emailDto, res); } - @Post('constancias') + @UseGuards(AuthGuard('jwt')) + @Post('constancias/:id') @UseInterceptors(FileInterceptor('file')) - async sendConstancias(@UploadedFile() file, @Body('nombreEvento') nombreEvento: string,) { - if(!file) { - throw new HttpException("No se ha cargado ningun archivo", HttpStatus.BAD_REQUEST) + async sendConstancias( + @UploadedFile() file, + @Param('id', ParseIntPipe) id: number, + @Res() res, + ) { + if (!file) { + throw new HttpException( + 'No se ha cargado ningun archivo', + HttpStatus.BAD_REQUEST, + ); } - /* console.log(file) */ - return this.emailService.sendConstancias(file, nombreEvento); + return this.emailService.sendConstancias(file, id, res); } } diff --git a/src/email/email.module.ts b/src/email/email.module.ts index 39df2ed..941deba 100644 --- a/src/email/email.module.ts +++ b/src/email/email.module.ts @@ -4,10 +4,13 @@ import { EventosModule } from 'src/eventos/eventos.module'; import { Participante } from 'src/participante/participante.entity'; import { EmailController } from './email.controller'; import { EmailService } from './email.service'; +import { EventosService } from 'src/eventos/eventos.service'; +import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; +import { Evento } from 'src/eventos/evento.entity'; @Module({ - imports:[TypeOrmModule.forFeature([Participante])], + imports:[TypeOrmModule.forFeature([Participante, EventoParticipante, Evento])], controllers:[EmailController], - providers:[EmailService] + providers:[EmailService, EventosService] }) export class EmailModule {} diff --git a/src/email/email.service.ts b/src/email/email.service.ts index 3ec96e4..8cb0f14 100644 --- a/src/email/email.service.ts +++ b/src/email/email.service.ts @@ -1,4 +1,11 @@ -import { HttpException, HttpStatus, Inject, Injectable, Res, UploadedFile } from '@nestjs/common'; +import { + HttpException, + HttpStatus, + Inject, + Injectable, + Res, + UploadedFile, +} from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { InjectRepository } from '@nestjs/typeorm'; import * as nodemailer from 'nodemailer'; @@ -13,6 +20,8 @@ import * as pdfFonts from 'pdfmake/build/vfs_fonts'; import * as fs from 'fs'; import * as path from 'path'; import { PDFDocument, StandardFonts, rgb } from 'pdf-lib'; +import { Response } from 'express'; +import { format } from 'date-fns'; @Injectable() export class EmailService { @@ -22,6 +31,7 @@ export class EmailService { @InjectRepository(Participante) private participanteRepository: Repository, private configService: ConfigService, + private readonly eventoService: EventosService, ) { this.transporter = nodemailer.createTransport({ service: this.configService.get('NODEMAILER_SERVICE'), @@ -32,7 +42,7 @@ export class EmailService { }); } - async sendEmail(id: number, message: EmailDto) { + async sendEmail(id: number, message: EmailDto, res: Response) { const participantes = await this.getEmailDeParticipantes(id); participantes.map((res) => { const emailDestinatario = res.email; @@ -41,8 +51,8 @@ export class EmailService { subject: message.subject, text: message.text, }); - /*console.log("Email enviado a: ", res)*/ }); + return res.status(201).json({ message: 'Correos enviados con exito' }); } async getEmailDeParticipantes(idEvento: number) { @@ -57,63 +67,113 @@ export class EmailService { return participantes; } - async sendConstancias(file, nombreEvento) { - /* console.log(file) */ + async sendConstancias(file, id_evento, res: Response) { + //traemos la info del evento + const evento = await this.eventoService.getEventosPorId(id_evento); + const workbook = xlsx.read(file.buffer); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; const data = xlsx.utils.sheet_to_json(worksheet); - for (const row of data as Row[]) { - const pdfDoc = await PDFDocument.create(); - const page = pdfDoc.addPage(); - page.setSize(792, 612); + // Carga el PDF pre-diseñado + const existingPdfBytes = fs.readFileSync('src/email/DisenoConstancia.pdf'); - const font = await pdfDoc.embedFont(StandardFonts.HelveticaBold); - const fontSize = 30; - const text = 'Constancia de asistencia'; - const textWidth = font.widthOfTextAtSize(text, fontSize); - const textHeight = font.heightAtSize(fontSize); + for (let i = 0; i < data.length; i++) { + const row = data[i] as Row; - page.drawText(text, { - x: (page.getWidth() - textWidth) / 2, - y: (page.getHeight() - textHeight) / 2, + if(row.Email == undefined){ + return res.status(400).json({ message: `El correo del renglon ${ i + 2} puede estar vacio o ser undefined`, solucion: `Seleccione el renglon donde ocurre el problema y borre todo lo de este renglon, Aunque parezca que el renglon esta vacio puede que haya un espacio en algun campo y esto genera que el sistema haga la lectura de este renglon`}); + } + + // Carga el PDF pre-diseñado en un documento PDF editable + const pdfDoc = await PDFDocument.load(existingPdfBytes); + + const pagina = pdfDoc.getPages(); + const primeraPagina = pagina[0]; + + // Obtén el ancho y alto de la página + const { width, height } = primeraPagina.getSize(); + + // Obtén la fuente del texto + const font = await pdfDoc.embedFont(StandardFonts.Helvetica); + + // Configura el tamaño del texto + const fontSize = 26; + + const nombreParticipante = `${row['Apellido Paterno']} ${row['Apellido Materno']} ${row.Nombre}`; + + // Calcula la anchura del texto del nombre del participante + const textWidth = font.widthOfTextAtSize(nombreParticipante, fontSize); + + const centerX = (width - textWidth) / 2; + const centerY = (height - fontSize) / 2; + + // Dibuja el texto centrado en la página + primeraPagina.drawText(nombreParticipante, { + x: centerX, + y: centerY + 70, size: fontSize, - font: font, - color: rgb(0/255, 0/255, 0/255), + color: rgb(0, 0, 0), }); - const { width, height } = page.getSize(); - page.drawText( - `Se le otorga la constancia por su asistencia al evento: ${nombreEvento}`, - { - x: 50, - y: height - 50, - size: 12, - font: await pdfDoc.embedFont('Helvetica'), - }, - ); - page.drawText( - `A ${row['Apellido Paterno']} ${row['Apellido Materno']} ${row.Nombre}`, - { - x: 50, - y: height - 80, - size: 12, - font: await pdfDoc.embedFont('Helvetica'), - }, - ); + const nombreCurso = `${evento.nombre}`; + + // Calcula la anchura del texto del nombre del evento + const nombreCursoWidth = font.widthOfTextAtSize(nombreCurso, fontSize); + + const centerXNombreCurso = (width - nombreCursoWidth) / 2; + const centerYNombreCurso = (height - fontSize) / 2; + + primeraPagina.drawText(nombreCurso, { + x: centerXNombreCurso, + y: centerYNombreCurso - 17, + size: fontSize, + color: rgb(0, 0, 0), + }); + + const fechaCurso = `del ${this.formatoFecha( + evento.fecha_inicio, + )} al ${this.formatoFecha(evento.fecha_fin)}`; + + // Calcula la anchura del texto del nombre del participante + const fechaCursoWidth = font.widthOfTextAtSize(fechaCurso, 20); + + const centerXFechaCurso = (width - fechaCursoWidth) / 2; + const centerYFechaCurso = (height - 20) / 2; + + primeraPagina.drawText(fechaCurso, { + x: centerXFechaCurso, + y: centerYFechaCurso - 55, + size: 20, + color: rgb(0, 0, 0), + }); + + // Guarda el PDF modificado en forma de bytes const pdfBytes = await pdfDoc.save(); + + // Crea el objeto de adjunto con el nombre y contenido del PDF const attachment = { - filename: `Constancia ${nombreEvento} - ${row.Nombre}_${row['Apellido Paterno']}.pdf`, + filename: `Constancia ${evento.nombre} - ${row.Nombre}_${row['Apellido Paterno']}.pdf`, content: pdfBytes, }; - /* const blob = new Blob([pdfBytes], { type: 'application/pdf' }); - const url = URL.createObjectURL(blob); */ + + // Crea el objeto Blob y la URL para el PDF + const blob = new Blob([pdfBytes], { type: 'application/pdf' }); + + // Envía el correo electrónico con la constancia adjunta this.transporter.sendMail({ to: row.Email, - subject: `Constancia de asistencia a "${nombreEvento}"`, - text: `¡Un saludo ${row.Nombre}! Aquí está tu constancia de asistencia por el evento "${nombreEvento}". Agradecemos tu asistencia y constancia, esperamos seguir viéndote en eventos futuros.`, + subject: `Constancia de asistencia a "${evento.nombre}"`, + text: `¡Un saludo ${row.Nombre}! Aquí está tu constancia de asistencia por el evento "${evento.nombre}". Agradecemos tu asistencia y constancia, esperamos seguir viéndote en eventos futuros.`, attachments: [attachment], }); } + + return res.status(200).json({ message: 'Constancias enviadas con éxito' }); + } + + formatoFecha(fecha: Date) { + const fechaLimpia = format(fecha, 'dd/MM/yyyy'); + return fechaLimpia; } } diff --git a/src/eventos/eventos.controller.ts b/src/eventos/eventos.controller.ts index 858b073..a484583 100644 --- a/src/eventos/eventos.controller.ts +++ b/src/eventos/eventos.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, Res } from '@nestjs/common'; +import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, Res, UseGuards } from '@nestjs/common'; import { Response } from 'express'; import { InjectRepository } from '@nestjs/typeorm'; import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; @@ -7,6 +7,7 @@ import { actualizarEventoDto } from './dto/actualizarEvento.dto'; import { crearEventoDto } from './dto/crearEvento.dto'; import { Evento } from './evento.entity'; import { EventosService } from './eventos.service'; +import { AuthGuard } from '@nestjs/passport'; @Controller('eventos') export class EventosController { @@ -23,16 +24,19 @@ export class EventosController { return this.eventoService.getEventosPorId(id) } + @UseGuards(AuthGuard('jwt')) @Post() postEvento(@Body() nuevoEvento: crearEventoDto){ return this.eventoService.postEvento(nuevoEvento) } + @UseGuards(AuthGuard('jwt')) @Patch(':id') patchEvento(@Param('id', ParseIntPipe)id:number, @Body() actualizacion: actualizarEventoDto){ return this.eventoService.updateEvento(id,actualizacion) } - + + @UseGuards(AuthGuard('jwt')) @Delete(':id') deleteEvento(@Param('id', ParseIntPipe)id: number){ return this.eventoService.deleteEventoParticipante(id) @@ -43,11 +47,13 @@ export class EventosController { return this.eventoService.getCupos(id) } + @UseGuards(AuthGuard('jwt')) @Get(':id/participante') async getParticipnates(@Param('id', ParseIntPipe)id:number){ return this.eventoService.getParticipantes(id) } + @UseGuards(AuthGuard('jwt')) @Get(':id/exportExcel') async exportarExcel (@Param('id', ParseIntPipe)id:number ,@Res() res: Response){ this.eventoService.exportarParticipantes(id, res) diff --git a/src/eventos/eventos.service.ts b/src/eventos/eventos.service.ts index e322a52..394fbe6 100644 --- a/src/eventos/eventos.service.ts +++ b/src/eventos/eventos.service.ts @@ -23,7 +23,7 @@ export class EventosService { return this.eventoRepository.find(); } - getEventosPorId(id: number) { + public getEventosPorId(id: number) { return this.eventoRepository.findOne({ where: { id_evento: id,