import { Module } from '@nestjs/common'; import databaseConfig from 'src/database/config/database.config'; import { DatabaseConfig } from 'src/database/config/database-config.type'; import { DocumentFilePersistenceModule } from './infrastructure/persistence/document/document-persistence.module'; import { RelationalFilePersistenceModule } from './infrastructure/persistence/relational/relational-persistence.module'; import { FilesService } from './files.service'; import fileConfig from './config/file.config'; import { FileConfig, FileDriver } from './config/file-config.type'; import { FilesLocalModule } from './infrastructure/uploader/local/files.module'; import { FilesS3Module } from './infrastructure/uploader/s3/files.module'; import { FilesS3PresignedModule } from './infrastructure/uploader/s3-presigned/files.module'; const infrastructurePersistenceModule = (databaseConfig() as DatabaseConfig) .isDocumentDatabase ? DocumentFilePersistenceModule : RelationalFilePersistenceModule; const infrastructureUploaderModule = (fileConfig() as FileConfig).driver === FileDriver.LOCAL ? FilesLocalModule : (fileConfig() as FileConfig).driver === FileDriver.S3 ? FilesS3Module : FilesS3PresignedModule; @Module({ imports: [infrastructurePersistenceModule, infrastructureUploaderModule], providers: [FilesService], exports: [FilesService, infrastructurePersistenceModule], }) export class FilesModule {}