From 08ae09f2d734b44d63621e1ee6e7a979ea5695c8 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Sat, 23 Apr 2022 23:55:07 -0500 Subject: [PATCH] multer listo --- package-lock.json | 19 +++++++ package.json | 1 + src/app.module.ts | 2 + .../upload-file.controller.spec.ts | 18 +++++++ src/upload-file/upload-file.controller.ts | 49 +++++++++++++++++++ src/upload-file/upload-file.module.ts | 27 ++++++++++ src/upload-file/upload-file.service.spec.ts | 18 +++++++ src/upload-file/upload-file.service.ts | 19 +++++++ 8 files changed, 153 insertions(+) create mode 100644 src/upload-file/upload-file.controller.spec.ts create mode 100644 src/upload-file/upload-file.controller.ts create mode 100644 src/upload-file/upload-file.module.ts create mode 100644 src/upload-file/upload-file.service.spec.ts create mode 100644 src/upload-file/upload-file.service.ts diff --git a/package-lock.json b/package-lock.json index 7f839e0..e6900e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "@types/bcrypt": "^5.0.0", "@types/express": "^4.17.13", "@types/jest": "27.4.1", + "@types/multer": "^1.4.7", "@types/node": "^16.0.0", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", @@ -1974,6 +1975,15 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "node_modules/@types/multer": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", + "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/node": { "version": "16.11.26", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", @@ -11227,6 +11237,15 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "@types/multer": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", + "integrity": "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, "@types/node": { "version": "16.11.26", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", diff --git a/package.json b/package.json index 89fa95d..65d27bf 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@types/bcrypt": "^5.0.0", "@types/express": "^4.17.13", "@types/jest": "27.4.1", + "@types/multer": "^1.4.7", "@types/node": "^16.0.0", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", diff --git a/src/app.module.ts b/src/app.module.ts index 967f586..b489b26 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -47,6 +47,7 @@ import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity'; import { Usuario } from './usuario/entity/usuario.entity'; import { AuthModule } from './auth/auth.module'; import { BcryptModule } from './bcrypt/bcrypt.module'; +import { UploadFileModule } from './upload-file/upload-file.module'; @Module({ imports: [ @@ -111,6 +112,7 @@ import { BcryptModule } from './bcrypt/bcrypt.module'; UsuarioModule, InstitucionTipoCarritoModule, BcryptModule, + UploadFileModule, ], }) export class AppModule {} diff --git a/src/upload-file/upload-file.controller.spec.ts b/src/upload-file/upload-file.controller.spec.ts new file mode 100644 index 0000000..cfdb703 --- /dev/null +++ b/src/upload-file/upload-file.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UploadFileController } from './upload-file.controller'; + +describe('UploadFileController', () => { + let controller: UploadFileController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [UploadFileController], + }).compile(); + + controller = module.get(UploadFileController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/upload-file/upload-file.controller.ts b/src/upload-file/upload-file.controller.ts new file mode 100644 index 0000000..e752359 --- /dev/null +++ b/src/upload-file/upload-file.controller.ts @@ -0,0 +1,49 @@ +import { + Controller, + Get, + Post, + Query, + Response, + UploadedFile, + UseInterceptors, +} from '@nestjs/common'; +import { FileInterceptor } from '@nestjs/platform-express'; +import { UploadFileService } from './upload-file.service'; +import { IdInstitucionDto } from 'src/dto/id-institucion.dto'; + +@Controller('upload-file') +export class UploadFileController { + constructor(private uploadFileService: UploadFileService) {} + + @Post('carga-masiva-equipos') + @UseInterceptors(FileInterceptor('file')) + cargaMasivaEquipos( + @UploadedFile() file: Express.Multer.File, + @Query() query: IdInstitucionDto, + ) { + this.uploadFileService.createEquipos(file, Number(query.id_institucion)); + } + + @Post('carga-masiva-usuarios') + @UseInterceptors(FileInterceptor('file')) + cargaMasivaUsuarios( + @UploadedFile() file: Express.Multer.File, + @Query() query: IdInstitucionDto, + ) { + this.uploadFileService.createEquipos(file, Number(query.id_institucion)); + } + + @Get('download-logo') + downloadLogo(@Response() res, @Query() query: IdInstitucionDto) { + return this.uploadFileService.downloadLogo(Number(query.id_institucion)); + } + + @Post('upload-logo') + @UseInterceptors(FileInterceptor('file')) + uploadLogo( + @UploadedFile() file: Express.Multer.File, + @Query() query: IdInstitucionDto, + ) { + this.uploadFileService.uploadLogo(file, Number(query.id_institucion)); + } +} diff --git a/src/upload-file/upload-file.module.ts b/src/upload-file/upload-file.module.ts new file mode 100644 index 0000000..83a5f7a --- /dev/null +++ b/src/upload-file/upload-file.module.ts @@ -0,0 +1,27 @@ +import { ConflictException, Module } from '@nestjs/common'; +import { MulterModule } from '@nestjs/platform-express'; +import { UploadFileController } from './upload-file.controller'; +import { UploadFileService } from './upload-file.service'; +import { EquipoModule } from 'src/equipo/equipo.module'; +import { UsuarioModule } from 'src/usuario/usuario.module'; + +@Module({ + imports: [ + MulterModule.register({ + dest: './upload', + fileFilter: (req, file, cb) => { + if (!file.originalname.match(/\.(jpg|jpeg|png|csv)/)) + return cb( + new ConflictException('Extención de archivo no valida.'), + false, + ); + return cb(null, true); + }, + }), + EquipoModule, + UsuarioModule, + ], + controllers: [UploadFileController], + providers: [UploadFileService], +}) +export class UploadFileModule {} diff --git a/src/upload-file/upload-file.service.spec.ts b/src/upload-file/upload-file.service.spec.ts new file mode 100644 index 0000000..f882113 --- /dev/null +++ b/src/upload-file/upload-file.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UploadFileService } from './upload-file.service'; + +describe('UploadFileService', () => { + let service: UploadFileService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [UploadFileService], + }).compile(); + + service = module.get(UploadFileService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts new file mode 100644 index 0000000..8e77e61 --- /dev/null +++ b/src/upload-file/upload-file.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@nestjs/common'; +import { EquipoService } from 'src/equipo/equipo.service'; +import { UsuarioService } from 'src/usuario/usuario.service'; + +@Injectable() +export class UploadFileService { + constructor( + private equipoService: EquipoService, + private usuarioService: UsuarioService, + ) {} + + createEquipos(file: Express.Multer.File, id_institucion: number) {} + + createUsuarios(file: Express.Multer.File, id_institucion: number) {} + + downloadLogo(id_institucion: number) {} + + uploadLogo(file: Express.Multer.File, id_institucion: number) {} +}