import { Module } from '@nestjs/common'; import { MulterModule } from '@nestjs/platform-express'; import * as multer from 'multer'; import * as mime from 'mime-types'; import { join } from 'path'; import { OAuth2Module } from 'src/modules/oauth2/oauth2.module'; import { ObjectsModule } from 'src/modules/objects/objects.module'; import { OAuth2AdminController } from './oauth2-admin.controller'; import { PrivilegeAdminController } from './privilege-admin.controller'; import { UserAdminController } from './user-admin.controller'; import { ConfigurationModule } from 'src/modules/config/config.module'; import { AdminService } from './admin.service'; import { AuditAdminController } from './audit-admin.controller'; @Module({ controllers: [ UserAdminController, PrivilegeAdminController, OAuth2AdminController, AuditAdminController, ], imports: [ ObjectsModule, OAuth2Module, ConfigurationModule, MulterModule.registerAsync({ useFactory: async () => ({ storage: multer.diskStorage({ destination: (req, file, cb) => { cb(null, join(__dirname, '..', '..', '..', '..', 'uploads')); }, filename: (req, file, cb) => { const hashTruncate = req.user.uuid.split('-')[0]; const timestamp = Math.floor(Date.now() / 1000); const ext = mime.extension(file.mimetype); cb(null, `app-${hashTruncate}-${timestamp}.${ext}`); }, }), limits: { fileSize: 1.049e7, // 10 MiB }, fileFilter: (req, file, cb) => { if ( !file.mimetype.startsWith('image/') || file.mimetype.includes('svg') ) { return cb(new Error('Invalid file type.'), false); } cb(null, true); }, }), }), ], providers: [AdminService], }) export class AdminApiModule {}