From 8fcfee0947f5d76422cf8cdb29b8a99335e458c2 Mon Sep 17 00:00:00 2001 From: Vyacheslav Chernyshev <81693471+slaveeks@users.noreply.github.com> Date: Sat, 29 Jun 2024 21:07:07 +0300 Subject: [PATCH] fix: fixed validation of upload file response type, fixed policy of getting file(added necessary preHandlers) (#259) * fix: fixed validation of upload file response type, fixed policy of getting file(added necessary preHandlers) * fix: removed conflict text, added doc for opt * refactor: eslint fixes * refactor: removed extra space from doc --- src/presentation/http/http-api.ts | 1 + src/presentation/http/router/upload.ts | 39 ++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/presentation/http/http-api.ts b/src/presentation/http/http-api.ts index 636ba3f2..c3df80e6 100644 --- a/src/presentation/http/http-api.ts +++ b/src/presentation/http/http-api.ts @@ -252,6 +252,7 @@ export default class HttpApi implements Api { fileUploaderService: domainServices.fileUploaderService, noteService: domainServices.noteService, fileSizeLimit: this.config.fileSizeLimit, + noteSettingsService: domainServices.noteSettingsService, }); } diff --git a/src/presentation/http/router/upload.ts b/src/presentation/http/router/upload.ts index d01cd66c..de3de609 100644 --- a/src/presentation/http/router/upload.ts +++ b/src/presentation/http/router/upload.ts @@ -5,6 +5,9 @@ import type NoteService from '@domain/service/note.js'; import useNoteResolver from '../middlewares/note/useNoteResolver.js'; import type { NoteAttachmentFileLocation } from '@domain/entities/file.js'; import { StatusCodes } from 'http-status-codes'; +import useNoteSettingsResolver from '../middlewares/noteSettings/useNoteSettingsResolver.js'; +import type NoteSettingsService from '@domain/service/noteSettings.js'; +import useMemberRoleResolver from '../middlewares/noteSettings/useMemberRoleResolver.js'; /** * Interface for upload router options @@ -20,6 +23,11 @@ interface UploadRouterOptions { */ noteService: NoteService; + /** + * Note settings service instance + */ + noteSettingsService: NoteSettingsService; + /** * Limit for uploaded files size */ @@ -35,6 +43,18 @@ const UploadRouter: FastifyPluginCallback = async (fastify, */ const { noteResolver } = useNoteResolver(opts.noteService); + /** + * Prepare note settings resolver middleware + * It should be used to use note settings in middlewares + */ + const { noteSettingsResolver } = useNoteSettingsResolver(opts.noteSettingsService); + + /** + * Prepare user role resolver middleware + * It should be used to use user role in middlewares + */ + const { memberRoleResolver } = useMemberRoleResolver(opts.noteSettingsService); + await fastify.register(fastifyMultipart, { limits: { fieldSize: opts.fileSizeLimit, @@ -74,14 +94,20 @@ const UploadRouter: FastifyPluginCallback = async (fastify, '2xx': { type: 'object', description: 'File key to get it from the API', - key: { - $ref: 'UploadSchema#/properties/key', + properties: { + key: { + $ref: 'UploadSchema#/properties/key', + }, }, }, }, }, attachValidation: true, - preHandler: [noteResolver], + preHandler: [ + noteResolver, + noteSettingsResolver, + memberRoleResolver, + ], }, async (request, reply) => { /** * @todo solve trouble with crashing app, when validations is not passed @@ -128,7 +154,6 @@ const UploadRouter: FastifyPluginCallback = async (fastify, $ref: 'UploadSchema#/properties/key', }, }, - response: { '2xx': { description: 'Generated buffer', @@ -138,7 +163,11 @@ const UploadRouter: FastifyPluginCallback = async (fastify, }, }, }, - preHandler: [noteResolver], + preHandler: [ + noteResolver, + noteSettingsResolver, + memberRoleResolver, + ], }, async (request, reply) => { const fileLocation: NoteAttachmentFileLocation = { noteId: request.note!.id,