AcadeDoc/apps/server/src/integrations/storage/providers/storage.provider.ts
Philipinho ccf9d5d99f more work on attachments
* fix frontend env usage
2024-05-22 23:24:57 +01:00

68 lines
1.9 KiB
TypeScript

import {
STORAGE_CONFIG_TOKEN,
STORAGE_DRIVER_TOKEN,
} from '../constants/storage.constants';
import { EnvironmentService } from '../../environment/environment.service';
import {
LocalStorageConfig,
S3StorageConfig,
StorageConfig,
StorageDriver,
StorageOption,
} from '../interfaces';
import { LocalDriver, S3Driver } from '../drivers';
function createStorageDriver(disk: StorageConfig): StorageDriver {
switch (disk.driver) {
case StorageOption.LOCAL:
return new LocalDriver(disk.config as LocalStorageConfig);
case StorageOption.S3:
return new S3Driver(disk.config as S3StorageConfig);
default:
throw new Error(`Unknown storage driver`);
}
}
export const storageDriverConfigProvider = {
provide: STORAGE_CONFIG_TOKEN,
useFactory: async (environmentService: EnvironmentService) => {
const driver = environmentService.getStorageDriver().toLowerCase();
switch (driver) {
case StorageOption.LOCAL:
return {
driver,
config: {
storagePath:
process.cwd() + '/' + environmentService.getLocalStoragePath(),
},
};
case StorageOption.S3:
return {
driver,
config: {
region: environmentService.getAwsS3Region(),
endpoint: environmentService.getAwsS3Endpoint(),
bucket: environmentService.getAwsS3Bucket(),
baseUrl: environmentService.getAwsS3Url(),
credentials: {
accessKeyId: environmentService.getAwsS3AccessKeyId(),
secretAccessKey: environmentService.getAwsS3SecretAccessKey(),
},
},
};
default:
throw new Error(`Unknown storage driver: ${driver}`);
}
},
inject: [EnvironmentService],
};
export const storageDriverProvider = {
provide: STORAGE_DRIVER_TOKEN,
useFactory: (config: StorageConfig) => createStorageDriver(config),
inject: [STORAGE_CONFIG_TOKEN],
};