import { Feature } from '@common-stack/server-core'; import { interfaces } from 'inversify'; import { SERVER_TYPES, ServerContext, IFileInfoService, IFileInfoDataLoader } from 'common/server'; import { IAwsS3Service } from '@container-stack/file-info-core'; import { graphqlUploadExpress } from 'graphql-upload'; import { resolver, schema } from './graphql'; import { externalContainerModule, localContainerModule } from './containers'; import { FileInfoMoleculerService } from './plugins'; import { config } from './config'; const createServiceGen = ( container: interfaces.Container, ): Partial => ({ fileInfoService: container.get(SERVER_TYPES.FileInfoService), fileInfoDataLoader: container.get(SERVER_TYPES.FileInfoDataLoader), awsS3Service: container.get(SERVER_TYPES.AwsS3Service), }); export default new Feature({ schema, createContainerFunc: [localContainerModule], createResolversFunc: resolver, createServiceFunc: createServiceGen, createMicroServiceContainerFunc: [externalContainerModule], middleware: [ (app) => app.use( graphqlUploadExpress({ maxFileSize: config.MAX_FILE_SIZE, maxFiles: config.MAX_FILES, maxFieldSize: config.MAX_FIELD_SIZE, }), ), ], addMicroserviceBrokerServiceClass: [FileInfoMoleculerService], });