@b2y/document-module
Version:
A flexible multi-provider storage adapter for file operations across S3, Azure Blob, Google Drive, and local storage
41 lines (37 loc) • 1.68 kB
JavaScript
// src/StorageFactory.js
const STORAGE_TYPES = require('./constants/StorageTypes');
const AmazonS3StorageProvider = require('./providers/AmazonS3StorageProvider');
const AzureBlobStorageProvider = require('./providers/AzureBlobStorageProvider');
const LocalFileStorageProvider = require('./providers/LocalFileStorageProvider');
const GoogleDriveStorageProvider = require('./providers/GoogleDriveStorageProvider');
const logger = require('../logger');
class StorageFactory {
/**
* Create a storage provider based on type
*
* @param {string} storageType - Type of storage provider to create
* @param {object} config - Configuration options for the provider
* @returns {BaseStorageProvider} - An instance of the storage provider
*/
static createStorageProvider(storageType = null, config = {}) {
// Use provided storageType or fall back to environment variable
const storage = storageType || process.env.DOCUMENT_STORAGE_TYPE;
if (!storage) {
throw new Error("Storage type must be specified");
}
switch (storage.toUpperCase()) {
case STORAGE_TYPES.AMAZON_S3:
return new AmazonS3StorageProvider(config);
case STORAGE_TYPES.AZURE_BLOB:
return new AzureBlobStorageProvider(config);
case STORAGE_TYPES.LOCAL_DRIVE:
return new LocalFileStorageProvider(config);
case STORAGE_TYPES.GOOGLE_DRIVE:
return new GoogleDriveStorageProvider(config);
default:
logger.error(`Unsupported storage type: ${storage}`);
throw new Error(`Unsupported storage type: ${storage}`);
}
}
}
module.exports = StorageFactory;