diff --git a/backend/src/core/api/index.js b/backend/src/core/api/index.js index 64d9838..56c7aeb 100644 --- a/backend/src/core/api/index.js +++ b/backend/src/core/api/index.js @@ -21,5 +21,5 @@ export const ModuleResolver = HandlerResolver.builder() ApplicationsResolver, JobResolver, AdminJobResolver, - RecruiterJobResolver, + RecruiterJobResolver ]); diff --git a/backend/src/core/api/media/media.controller.js b/backend/src/core/api/media/media.controller.js index 9e0e7b9..8b70102 100644 --- a/backend/src/core/api/media/media.controller.js +++ b/backend/src/core/api/media/media.controller.js @@ -6,8 +6,8 @@ class Controller { this.service = MediaService; } - uploadMany = async req => { - const data = await this.service.uploadMany(req.files); + upload = async req => { + const data = await this.service.uploadOne(req.file); return ValidHttpResponse.toOkResponse(data); }; diff --git a/backend/src/core/api/media/media.resolver.js b/backend/src/core/api/media/media.resolver.js index fce9a83..4d7c93f 100644 --- a/backend/src/core/api/media/media.resolver.js +++ b/backend/src/core/api/media/media.resolver.js @@ -1,5 +1,5 @@ -import { uploadMediaSwagger } from 'core/common/swagger'; -import { deleteMediasInterceptor, MediaInterceptor } from 'core/modules/document'; +import { uploadMediaSwagger, uploadFileSwagger } from 'core/common/swagger'; +import { deleteMediasInterceptor, MediaInterceptor, FileInterceptor } from 'core/modules/document'; import { Module } from 'packages/handler/Module'; import { MediaController } from './media.controller'; @@ -11,16 +11,25 @@ export const MediaResolver = Module.builder() }) .register([ { - route: '/images', + route: '/image', method: 'post', params: [uploadMediaSwagger], consumes: ['multipart/form-data'], - interceptors: [new MediaInterceptor(10)], - controller: MediaController.uploadMany, + interceptors: [new MediaInterceptor(1)], + controller: MediaController.upload, preAuthorization: true }, { - route: '/images', + route: '/file', + method: 'post', + params: [uploadFileSwagger], + consumes: ['multipart/form-data'], + interceptors: [new FileInterceptor(1)], + controller: MediaController.upload, + preAuthorization: true + }, + { + route: '/', method: 'delete', interceptors: [deleteMediasInterceptor], body: 'DeleteFileDto', diff --git a/backend/src/core/common/swagger/index.js b/backend/src/core/common/swagger/index.js index 4e10146..a52122b 100644 --- a/backend/src/core/common/swagger/index.js +++ b/backend/src/core/common/swagger/index.js @@ -1,5 +1,6 @@ export * from './filter'; export * from './record-id'; +export * from './upload-image'; export * from './upload-file'; export * from './page'; export * from './page-size'; diff --git a/backend/src/core/common/swagger/upload-file.js b/backend/src/core/common/swagger/upload-file.js index 82354b4..b7bf298 100644 --- a/backend/src/core/common/swagger/upload-file.js +++ b/backend/src/core/common/swagger/upload-file.js @@ -1,9 +1,9 @@ import { SwaggerDocument } from '../../../packages/swagger'; -export const uploadMediaSwagger = SwaggerDocument.ApiParams({ - name: 'image', +export const uploadFileSwagger = SwaggerDocument.ApiParams({ + name: 'file', paramsIn: 'formData', require: true, type: 'file', - description: 'Image file to upload', + description: 'Document file to upload (.pdf, .doc, .docx, .xls, .xlsx)', }); diff --git a/backend/src/core/common/swagger/upload-image.js b/backend/src/core/common/swagger/upload-image.js new file mode 100644 index 0000000..82354b4 --- /dev/null +++ b/backend/src/core/common/swagger/upload-image.js @@ -0,0 +1,9 @@ +import { SwaggerDocument } from '../../../packages/swagger'; + +export const uploadMediaSwagger = SwaggerDocument.ApiParams({ + name: 'image', + paramsIn: 'formData', + require: true, + type: 'file', + description: 'Image file to upload', +}); diff --git a/backend/src/core/modules/document/interceptor/file.interceptor.js b/backend/src/core/modules/document/interceptor/file.interceptor.js new file mode 100644 index 0000000..fad61e7 --- /dev/null +++ b/backend/src/core/modules/document/interceptor/file.interceptor.js @@ -0,0 +1,14 @@ +import { ROOT_DIR } from 'core/env'; +import { BaseMulterInterceptor } from './multer.interceptor'; +import { MulterUploader } from '../multer.handler'; + +export class FileInterceptor extends BaseMulterInterceptor { + constructor(fileQuantity = 1) { + super(new MulterUploader( + ['.pdf', '.doc', '.docx', '.xls', '.xlsx'], + 'file', + fileQuantity, + `${ROOT_DIR}/core/uploads/documents` + )); + } +} \ No newline at end of file diff --git a/backend/src/core/modules/document/interceptor/index.js b/backend/src/core/modules/document/interceptor/index.js index 12dd613..da60fb2 100644 --- a/backend/src/core/modules/document/interceptor/index.js +++ b/backend/src/core/modules/document/interceptor/index.js @@ -1,2 +1,3 @@ export * from './deleteFiles.interceptor'; export * from './media.interceptor'; +export * from './file.interceptor'; \ No newline at end of file diff --git a/backend/src/core/modules/document/service/media.service.js b/backend/src/core/modules/document/service/media.service.js index ec4bf0e..e87c0f7 100644 --- a/backend/src/core/modules/document/service/media.service.js +++ b/backend/src/core/modules/document/service/media.service.js @@ -28,12 +28,6 @@ class Service { } } - async uploadMany(files, folderName = '') { - const uploadTasks = files.map(file => this.uploadOne(file, folderName)); - - return Promise.all(uploadTasks); - } - async deleteMany(ids) { const deleteTasks = ids.map(id => this.deleteOne(id));