From 8cc47a7671a20bf477a8d7c5101e6a76d7f4dfa6 Mon Sep 17 00:00:00 2001 From: jeantanzj <33819199+jeantanzj@users.noreply.github.com> Date: Mon, 11 May 2020 12:31:44 +0800 Subject: [PATCH] refactor: restore sequelizeLoader to consistent format (#208) --- backend/src/core/loaders/index.ts | 6 +-- backend/src/core/loaders/sequelize.loader.ts | 52 +++++++++----------- backend/src/core/services/job.service.ts | 8 +-- 3 files changed, 29 insertions(+), 37 deletions(-) diff --git a/backend/src/core/loaders/index.ts b/backend/src/core/loaders/index.ts index ca32b6ce6..e6d028de7 100644 --- a/backend/src/core/loaders/index.ts +++ b/backend/src/core/loaders/index.ts @@ -1,16 +1,16 @@ +import { Application } from 'express' import securityHeadersLoader from './security-headers.loader' import expressLoader from './express.loader' import swaggerLoader from './swagger.loader' import sessionLoader from './session.loader' -import SequelizeLoader from './sequelize.loader' -import { Application } from 'express' +import sequelizeLoader from './sequelize.loader' import cloudwatchLoader from './cloudwatch.loader' const loaders = async ({ app }: { app: Application }): Promise => { securityHeadersLoader({ app }) await cloudwatchLoader() - await SequelizeLoader.load() + await sequelizeLoader() await sessionLoader({ app }) await expressLoader({ app }) await swaggerLoader({ app }) diff --git a/backend/src/core/loaders/sequelize.loader.ts b/backend/src/core/loaders/sequelize.loader.ts index 0d46d611d..2bb7baa43 100644 --- a/backend/src/core/loaders/sequelize.loader.ts +++ b/backend/src/core/loaders/sequelize.loader.ts @@ -8,37 +8,29 @@ import logger from '@core/logger' const DB_URI = config.database.databaseUri -class SequelizeLoader { - private static _sequelize: Sequelize | undefined - static get sequelize(): Sequelize | undefined { - return this._sequelize +const sequelizeLoader = async (): Promise => { + const dialectOptions = config.IS_PROD ? { ...config.database.dialectOptions } : {} + const sequelize = new Sequelize(DB_URI, { + dialect: 'postgres', + logging: false, + pool: config.database.poolOptions, + ...dialectOptions, + }) + + const coreModels = [Credential, JobQueue, Campaign, User, Worker] + const emailModels = [EmailMessage, EmailTemplate, EmailOp] + const smsModels = [SmsMessage, SmsTemplate, SmsOp] + sequelize.addModels([...coreModels, ...emailModels, ...smsModels]) + + try { + await sequelize.sync() + logger.info({ message: 'Database loaded.' }) + } catch (err) { + logger.error(`Unable to connect to database: ${err}`) + process.exit(1) } - static async load(): Promise { - const dialectOptions = config.IS_PROD ? { ...config.database.dialectOptions } : {} - const sequelize = new Sequelize(DB_URI, { - dialect: 'postgres', - logging: false, - pool: config.database.poolOptions, - ...dialectOptions, - }) - - const coreModels = [Credential, JobQueue, Campaign, User, Worker] - const emailModels = [EmailMessage, EmailTemplate, EmailOp] - const smsModels = [SmsMessage, SmsTemplate, SmsOp] - sequelize.addModels([...coreModels, ...emailModels, ...smsModels]) - try { - this._sequelize = await sequelize.sync() - logger.info({ message: 'Database loaded.' }) - } catch (err) { - logger.error(`Unable to connect to database: ${err}`) - process.exit(1) - } - - await Credential.findCreateFind({ where: { name: 'EMAIL_DEFAULT' } }) - - } + await Credential.findCreateFind({ where: { name: 'EMAIL_DEFAULT' } }) } - -export default SequelizeLoader \ No newline at end of file +export default sequelizeLoader \ No newline at end of file diff --git a/backend/src/core/services/job.service.ts b/backend/src/core/services/job.service.ts index 345f79b15..dc3094866 100644 --- a/backend/src/core/services/job.service.ts +++ b/backend/src/core/services/job.service.ts @@ -1,8 +1,8 @@ -import SequelizeLoader from '@core/loaders/sequelize.loader' +import { Campaign } from '@core/models' import { QueryTypes } from 'sequelize' import get from 'lodash/get' const createJob = async ({ campaignId, rate }: {campaignId: number; rate: number}): Promise => { - const job = await SequelizeLoader.sequelize?.query('SELECT insert_job(:campaignId, :rate);', + const job = await Campaign.sequelize?.query('SELECT insert_job(:campaignId, :rate);', { replacements: { campaignId, rate }, type: QueryTypes.SELECT, }) @@ -10,13 +10,13 @@ const createJob = async ({ campaignId, rate }: {campaignId: number; rate: number return jobId ? Number(jobId) : undefined } const stopCampaign = (campaignId: number): Promise | undefined => { - return SequelizeLoader.sequelize?.query('SELECT stop_jobs(:campaignId);', + return Campaign.sequelize?.query('SELECT stop_jobs(:campaignId);', { replacements: { campaignId }, type: QueryTypes.SELECT, }) } const retryCampaign = (campaignId: number): Promise | undefined => { - return SequelizeLoader.sequelize?.query('SELECT retry_jobs(:campaignId);', + return Campaign.sequelize?.query('SELECT retry_jobs(:campaignId);', { replacements: { campaignId }, type: QueryTypes.SELECT, })