import { ConfigService } from '@nestjs/config'; import type { IFileStorage } from '../../domain/ports/file-storage.port.js'; import { LocalFileStorage } from './local-file-storage.js'; import { S3FileStorage } from './s3-file-storage.js'; /** FILE_STORAGE=s3 — S3-совместимое хранилище, иначе локальный диск */ export function createFileStorage(config: ConfigService): IFileStorage { const driver = config.get('FILE_STORAGE', 'local'); if (driver === 's3') { return new S3FileStorage({ endpoint: config.get('S3_ENDPOINT') || undefined, region: config.get('S3_REGION', 'us-east-1'), bucket: config.getOrThrow('S3_BUCKET'), accessKeyId: config.getOrThrow('S3_ACCESS_KEY_ID'), secretAccessKey: config.getOrThrow('S3_SECRET_ACCESS_KEY'), forcePathStyle: config.get('S3_FORCE_PATH_STYLE', 'true') !== 'false', }); } if (driver !== 'local') { throw new Error(`Неизвестный FILE_STORAGE=${driver}, ожидается local | s3`); } return new LocalFileStorage(config.get('FILE_STORAGE_LOCAL_DIR', './storage')); }