@onurege3467/zerohelper
Version:
ZeroHelper is a versatile JavaScript library offering helper functions, validation, logging, database utilities and migration system for developers. It supports MongoDB, MySQL, SQLite, Redis, and PostgreSQL with increment/decrement operations.
73 lines (61 loc) • 2.46 kB
JavaScript
// database-factory.js
const IDatabase = require('./IDatabase');
const MySQLDatabase = require('./mysql');
const SQLiteDatabase = require('./sqlite');
const MongoDBDatabase = require('./mongodb');
const JsonDatabase = require('./json');
const PostgreSQLDatabase = require('./pg');
const RedisDatabase = require('./redis'); // Yeni Redis adapter
const CacheWrapper = require('./cacheWrapper');
const MigrationManager = require('./migration');
const adapters = {
mysql: MySQLDatabase,
sqlite: SQLiteDatabase,
mongodb: MongoDBDatabase,
postgres: PostgreSQLDatabase,
json: JsonDatabase,
redis: RedisDatabase, // Redis adapter eklendi
};
/**
* Belirtilen adaptör tipine göre bir veritabanı örneği oluşturur ve döndürür.
* Bu bir "Fabrika Fonksiyonu"dur.
*
* @param {object} options - Yapılandırma seçenekleri.
* @param {keyof adapters} options.adapter - Kullanılacak adaptör ('mysql', 'sqlite', 'redis', vb.).
* @param {object} options.config - Seçilen adaptöre özel yapılandırma.
* @returns {IDatabase} - IDatabase arayüzünü uygulayan bir örnek döndürür.
*/
function createDatabase(options) {
const { adapter, config } = options;
if (!adapter || !adapters[adapter]) {
throw new Error(`Geçersiz veya desteklenmeyen adaptör: ${adapter}. Desteklenenler: ${Object.keys(adapters).join(', ')}`);
}
if (!config) {
throw new Error(`'${adapter}' adaptörü için yapılandırma (config) gereklidir.`);
}
// İlgili adaptör sınıfını al
const DatabaseClass = adapters[adapter];
// Sınıfın bir örneğini oluştur ve doğrudan döndür
const dbInstance = new DatabaseClass(config);
// Eğer cache etkinse, veritabanı örneğini CacheWrapper ile sarmala
if (config.cache) {
return new Proxy(new CacheWrapper(dbInstance, config.cache), {
get: (target, prop) => {
if (typeof target[prop] !== 'undefined') {
return target[prop];
} else if (typeof target.db[prop] === 'function') {
return target.db[prop].bind(target.db);
} else {
return target.db[prop];
}
}
});
}
return dbInstance;
}
// Artık varsayılan olarak bu fonksiyonu export ediyoruz.
module.exports = createDatabase;
// Migration manager'ı da export ediyoruz
module.exports.MigrationManager = MigrationManager;
// Eğer hem fonksiyonu hem de tipleri export etmek isterseniz:
// module.exports = { createDatabase, MigrationManager };