added working config lib
This commit is contained in:
parent
f8576c0d93
commit
def9bce8dc
33 changed files with 2896 additions and 1485 deletions
|
|
@ -1,91 +1,54 @@
|
|||
/**
|
||||
* Database configuration for Stock Bot services
|
||||
* Database configuration using envalid
|
||||
*/
|
||||
import { z } from 'zod';
|
||||
import { getEnvVar, getNumericEnvVar, validateConfig, createConfigLoader } from './core';
|
||||
import { databaseConfigSchema, DatabaseConfig } from './types';
|
||||
import { cleanEnv, str, port, bool, num } from 'envalid';
|
||||
|
||||
/**
|
||||
* Default database configuration
|
||||
* Database configuration with validation and defaults
|
||||
*/
|
||||
const defaultDatabaseConfig: DatabaseConfig = {
|
||||
dragonfly: {
|
||||
host: 'localhost',
|
||||
port: 6379,
|
||||
maxRetriesPerRequest: 3
|
||||
},
|
||||
questDB: {
|
||||
host: 'localhost',
|
||||
port: 8812,
|
||||
database: 'stockbot',
|
||||
user: 'admin',
|
||||
httpPort: 9000
|
||||
},
|
||||
mongodb: {
|
||||
uri: 'mongodb://localhost:27017',
|
||||
database: 'stockbot'
|
||||
},
|
||||
postgres: {
|
||||
host: 'localhost',
|
||||
port: 5432,
|
||||
database: 'stockbot',
|
||||
user: 'postgres',
|
||||
poolSize: 10,
|
||||
ssl: false
|
||||
}
|
||||
};
|
||||
export const databaseConfig = cleanEnv(process.env, {
|
||||
// PostgreSQL Configuration
|
||||
DB_HOST: str({ default: 'localhost', desc: 'Database host' }),
|
||||
DB_PORT: port({ default: 5432, desc: 'Database port' }),
|
||||
DB_NAME: str({ default: 'stockbot', desc: 'Database name' }),
|
||||
DB_USER: str({ default: 'stockbot', desc: 'Database user' }),
|
||||
DB_PASSWORD: str({ default: '', desc: 'Database password' }),
|
||||
|
||||
// Connection Pool Settings
|
||||
DB_POOL_MIN: num({ default: 2, desc: 'Minimum pool connections' }),
|
||||
DB_POOL_MAX: num({ default: 10, desc: 'Maximum pool connections' }),
|
||||
DB_POOL_IDLE_TIMEOUT: num({ default: 30000, desc: 'Pool idle timeout in ms' }),
|
||||
|
||||
// SSL Configuration
|
||||
DB_SSL: bool({ default: false, desc: 'Enable SSL for database connection' }),
|
||||
DB_SSL_REJECT_UNAUTHORIZED: bool({ default: true, desc: 'Reject unauthorized SSL certificates' }),
|
||||
|
||||
// Additional Settings
|
||||
DB_QUERY_TIMEOUT: num({ default: 30000, desc: 'Query timeout in ms' }),
|
||||
DB_CONNECTION_TIMEOUT: num({ default: 5000, desc: 'Connection timeout in ms' }),
|
||||
DB_STATEMENT_TIMEOUT: num({ default: 30000, desc: 'Statement timeout in ms' }),
|
||||
DB_LOCK_TIMEOUT: num({ default: 10000, desc: 'Lock timeout in ms' }),
|
||||
DB_IDLE_IN_TRANSACTION_SESSION_TIMEOUT: num({ default: 60000, desc: 'Idle in transaction timeout in ms' }),
|
||||
});
|
||||
|
||||
/**
|
||||
* Load database configuration from environment variables
|
||||
*/
|
||||
export function loadDatabaseConfig(): DatabaseConfig {
|
||||
const config = {
|
||||
dragonfly: {
|
||||
host: getEnvVar('DRAGONFLY_HOST') || defaultDatabaseConfig.dragonfly.host,
|
||||
port: getNumericEnvVar('DRAGONFLY_PORT', defaultDatabaseConfig.dragonfly.port),
|
||||
password: getEnvVar('DRAGONFLY_PASSWORD'),
|
||||
maxRetriesPerRequest: getNumericEnvVar('DRAGONFLY_MAX_RETRIES_PER_REQUEST',
|
||||
defaultDatabaseConfig.dragonfly.maxRetriesPerRequest)
|
||||
},
|
||||
questDB: {
|
||||
host: getEnvVar('QUESTDB_HOST') || defaultDatabaseConfig.questDB.host,
|
||||
port: getNumericEnvVar('QUESTDB_PORT', defaultDatabaseConfig.questDB.port),
|
||||
database: getEnvVar('QUESTDB_DB') || defaultDatabaseConfig.questDB.database,
|
||||
user: getEnvVar('QUESTDB_USER') || defaultDatabaseConfig.questDB.user,
|
||||
password: getEnvVar('QUESTDB_PASSWORD'),
|
||||
httpPort: getNumericEnvVar('QUESTDB_HTTP_PORT', defaultDatabaseConfig.questDB.httpPort)
|
||||
},
|
||||
mongodb: {
|
||||
uri: getEnvVar('MONGODB_URI') || defaultDatabaseConfig.mongodb.uri,
|
||||
database: getEnvVar('MONGODB_DATABASE') || defaultDatabaseConfig.mongodb.database,
|
||||
username: getEnvVar('MONGODB_USERNAME'),
|
||||
password: getEnvVar('MONGODB_PASSWORD'),
|
||||
options: process.env.MONGODB_OPTIONS ? JSON.parse(process.env.MONGODB_OPTIONS) : undefined
|
||||
},
|
||||
postgres: {
|
||||
host: getEnvVar('POSTGRES_HOST') || defaultDatabaseConfig.postgres.host,
|
||||
port: getNumericEnvVar('POSTGRES_PORT', defaultDatabaseConfig.postgres.port),
|
||||
database: getEnvVar('POSTGRES_DB') || defaultDatabaseConfig.postgres.database,
|
||||
user: getEnvVar('POSTGRES_USER') || defaultDatabaseConfig.postgres.user,
|
||||
password: getEnvVar('POSTGRES_PASSWORD'),
|
||||
ssl: process.env.POSTGRES_SSL === 'true',
|
||||
poolSize: getNumericEnvVar('POSTGRES_POOL_SIZE', defaultDatabaseConfig.postgres.poolSize)
|
||||
}
|
||||
};
|
||||
// Export typed configuration object
|
||||
export type DatabaseConfig = typeof databaseConfig;
|
||||
|
||||
return validateConfig(config, databaseConfigSchema);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dynamic configuration loader for database config
|
||||
*/
|
||||
export const createDatabaseConfig = createConfigLoader<typeof defaultDatabaseConfig>(
|
||||
'database',
|
||||
databaseConfigSchema,
|
||||
defaultDatabaseConfig
|
||||
);
|
||||
|
||||
/**
|
||||
* Singleton database configuration
|
||||
*/
|
||||
export const databaseConfig = loadDatabaseConfig();
|
||||
// Export individual config values for convenience
|
||||
export const {
|
||||
DB_HOST,
|
||||
DB_PORT,
|
||||
DB_NAME,
|
||||
DB_USER,
|
||||
DB_PASSWORD,
|
||||
DB_POOL_MIN,
|
||||
DB_POOL_MAX,
|
||||
DB_POOL_IDLE_TIMEOUT,
|
||||
DB_SSL,
|
||||
DB_SSL_REJECT_UNAUTHORIZED,
|
||||
DB_QUERY_TIMEOUT,
|
||||
DB_CONNECTION_TIMEOUT,
|
||||
DB_STATEMENT_TIMEOUT,
|
||||
DB_LOCK_TIMEOUT,
|
||||
DB_IDLE_IN_TRANSACTION_SESSION_TIMEOUT,
|
||||
} = databaseConfig;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue