From 6086fe5cdc388d8f5849bb5961bc10f7a10163bb Mon Sep 17 00:00:00 2001 From: deweyjose Date: Mon, 25 Mar 2019 15:44:10 -0400 Subject: [PATCH] fix(configuration): DRY, pushed database configuration code into a single configurationManager script (#74) --- src/core/code-generator.ts | 35 +++++++++++++++------- src/torm/createConnection.ts | 48 +++++++++++++++++------------- src/utils/configurationManager.ts | 49 +++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 31 deletions(-) create mode 100644 src/utils/configurationManager.ts diff --git a/src/core/code-generator.ts b/src/core/code-generator.ts index 8056c3ed..d1fe3066 100644 --- a/src/core/code-generator.ts +++ b/src/core/code-generator.ts @@ -119,6 +119,19 @@ export class CodeGenerator { private async writeOrmConfig() { const contents = ` import { SnakeNamingStrategy } from '${this.options.warthogImportPath}'; +import { + getDatabaseName, + getDatabaseEntityPaths, + getDatabaseHost, + getDatabaseLoggingLevel, + getDatabaseMigrationPaths, + getDatabaseSubscriberPaths, + getDatabasePassword, + getDatabasePort, + shouldSchronizeDatabaseSchema, + getDatabaseType, + getDatabaseUsername +} from '../utils/configurationManager' module.exports = { cli: { @@ -126,19 +139,19 @@ module.exports = { migrationsDir: 'db/migrations', subscribersDir: 'src/subscribers' }, - database: process.env.TYPEORM_DATABASE, - entities: process.env.TYPEORM_ENTITIES ? process.env.TYPEORM_ENTITIES.split(',') : ['src/**/*.model.ts'], - host: process.env.TYPEORM_HOST || 'localhost', + database: getDatabaseName(), + entities: getDatabaseEntityPaths(), + host: getDatabaseHost(), logger: 'advanced-console', - logging: process.env.TYPEORM_LOGGING || 'all', - migrations: process.env.TYPEORM_MIGRATIONS ? process.env.TYPEORM_MIGRATIONS.split(',') : ['src/migration/**/*.ts'], + logging: getDatabaseLoggingLevel(), + migrations: getDatabaseMigrationPaths(), namingStrategy: new SnakeNamingStrategy(), - password: process.env.TYPEORM_PASSWORD, - port: parseInt(process.env.TYPEORM_PORT || '', 10) || 5432, - subscribers: process.env.TYPEORM_SUBSCRIBERS ? process.env.TYPEORM_SUBSCRIBERS.split(',') : ['src/**/*.model.ts'], - synchronize: process.env.TYPEORM_SYNCHRONIZE === 'true', - type: 'postgres', - username: process.env.TYPEORM_USERNAME + password: getDatabasePassword(), + port: getDatabasePort(), + subscribers: getDatabaseSubscriberPaths(), + synchronize: shouldSchronizeDatabaseSchema(), + type: getDatabaseType(), + username: getDatabaseUsername() };`; return this.writeToGeneratedFolder('ormconfig.ts', contents); diff --git a/src/torm/createConnection.ts b/src/torm/createConnection.ts index 2d5523be..0161133c 100644 --- a/src/torm/createConnection.ts +++ b/src/torm/createConnection.ts @@ -2,6 +2,20 @@ import { ConnectionOptions, createConnection } from 'typeorm'; import { SnakeNamingStrategy } from './SnakeNamingStrategy'; +import { + getDatabaseEntityPaths, + getDatabaseHost, + getDatabaseLoggingLevel, + getDatabaseMigrationPaths, + getDatabaseName, + getDatabasePassword, + getDatabasePort, + getDatabaseSubscriberPaths, + getDatabaseType, + getDatabaseUsername, + shouldSchronizeDatabaseSchema +} from '../utils/configurationManager'; + export const createDBConnection = (dbOptions: Partial = {}) => { const config = { ...getBaseConfig(), @@ -24,9 +38,9 @@ export const createDBConnection = (dbOptions: Partial = {}) = export const mockDBConnection = (dbOptions: Partial = {}) => { return createDBConnection({ ...dbOptions, - database: 'warthog.sqlite.tmp', - synchronize: false, - type: 'sqlite' + database: getDatabaseHost(), + synchronize: shouldSchronizeDatabaseSchema(), + type: getDatabaseType() } as any); }; @@ -37,24 +51,18 @@ function getBaseConfig() { migrationsDir: 'src/migration', subscribersDir: 'src/subscriber' }, - database: process.env.TYPEORM_DATABASE, - entities: process.env.TYPEORM_ENTITIES - ? process.env.TYPEORM_ENTITIES.split(',') - : ['src/**/*.model.ts'], - host: process.env.TYPEORM_HOST || 'localhost', + database: getDatabaseName(), + entities: getDatabaseEntityPaths(), + host: getDatabaseHost(), logger: 'advanced-console', - logging: process.env.TYPEORM_LOGGING || 'all', - migrations: process.env.TYPEORM_MIGRATIONS - ? process.env.TYPEORM_MIGRATIONS.split(',') - : ['src/migration/**/*.ts'], + logging: getDatabaseLoggingLevel(), + migrations: getDatabaseMigrationPaths(), namingStrategy: new SnakeNamingStrategy(), - password: process.env.TYPEORM_PASSWORD, - port: parseInt(process.env.TYPEORM_PORT || '', 10) || 5432, - subscribers: process.env.TYPEORM_SUBSCRIBERS - ? process.env.TYPEORM_SUBSCRIBERS.split(',') - : ['src/**/*.model.ts'], - synchronize: process.env.TYPEORM_SYNCHRONIZE === 'true', - type: 'postgres', - username: process.env.TYPEORM_USERNAME + password: getDatabasePassword(), + port: getDatabasePort(), + subscribers: getDatabaseSubscriberPaths(), + synchronize: shouldSchronizeDatabaseSchema(), + type: getDatabaseType(), + username: getDatabaseUsername() }; } diff --git a/src/utils/configurationManager.ts b/src/utils/configurationManager.ts new file mode 100644 index 00000000..4aff5fa2 --- /dev/null +++ b/src/utils/configurationManager.ts @@ -0,0 +1,49 @@ +export function getDatabaseName(): string { + return process.env.TYPEORM_DATABASE ? process.env.TYPEORM_DATABASE : ''; +} + +export function getDatabaseType(): string { + return process.env.TYPEORM_DATABASE_TYPE ? process.env.TYPEORM_DATABASE_TYPE : 'postgres'; +} + +export function getDatabaseHost(): string { + return process.env.TYPEORM_HOST || 'localhost'; +} + +export function shouldSchronizeDatabaseSchema(): boolean { + return process.env.TYPEORM_SYNCHRONIZE === 'true'; +} + +export function getDatabaseLoggingLevel() { + return process.env.TYPEORM_LOGGING || 'all'; +} + +export function getDatabaseEntityPaths(): string[] { + return process.env.TYPEORM_ENTITIES + ? process.env.TYPEORM_ENTITIES.split(',') + : ['src/**/*.model.ts']; +} + +export function getDatabaseMigrationPaths(): string[] { + return process.env.TYPEORM_MIGRATIONS + ? process.env.TYPEORM_MIGRATIONS.split(',') + : ['src/migration/**/*.ts']; +} + +export function getDatabaseSubscriberPaths(): string[] { + return process.env.TYPEORM_SUBSCRIBERS + ? process.env.TYPEORM_SUBSCRIBERS.split(',') + : ['src/**/*.model.ts']; +} + +export function getDatabaseUsername(): string | undefined { + return process.env.TYPEORM_USERNAME; +} + +export function getDatabasePassword(): string | undefined { + return process.env.TYPEORM_PASSWORD; +} + +export function getDatabasePort(): number { + return parseInt(process.env.TYPEORM_PORT || '', 10) || 5432; +}