diff --git a/src/app.module.ts b/src/app.module.ts index 16b94ca..fe49782 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -12,6 +12,8 @@ import { Issues } from './datasources/issues'; import configuration from './configs/app'; import { RedmineEventsGateway } from '@app/event-emitter/events/redmine-events.gateway'; import { RedmineTypes } from '@app/redmine-types/index'; +import { CouchDb } from './datasources/couchdb'; +import { Users } from './datasources/users'; @Module({ imports: [ @@ -22,7 +24,7 @@ import { RedmineTypes } from '@app/redmine-types/index'; ConfigModule.forRoot({ load: [configuration] }), ], controllers: [AppController, MainController], - providers: [AppService, Issues], + providers: [AppService, Issues, CouchDb, Users], }) export class AppModule implements OnModuleInit { private logger = new Logger(AppModule.name); diff --git a/src/configs/app.ts b/src/configs/app.ts index bc09d0d..0cb9b82 100644 --- a/src/configs/app.ts +++ b/src/configs/app.ts @@ -6,6 +6,9 @@ const appConfig = { issues: process.env['ELTEX_REDMINE_HELPER_COUCHDB_ISSUES_DB_NAME'] || 'redmine_issues', + users: + process.env['ELTEX_REDMINE_HELPER_COUCHDB_USERS_DB_NAME'] || + 'redmine_users', }, }; diff --git a/src/datasources/couchdb.ts b/src/datasources/couchdb.ts new file mode 100644 index 0000000..dddf15b --- /dev/null +++ b/src/datasources/couchdb.ts @@ -0,0 +1,21 @@ +import { Injectable, Logger } from '@nestjs/common'; +import nano from 'nano'; +import configuration from '../configs/app'; + +const config = configuration(); + +@Injectable() +export class CouchDb { + private static logger = new Logger(CouchDb.name); + private static couchdb: nano.ServerScope | null = null; + + static getCouchDb(): nano.ServerScope { + if (CouchDb.couchdb) { + return CouchDb.couchdb; + } + const n = nano(config.couchDbUrl); + CouchDb.logger.log(`CouchDb connected by url ${config.couchDbUrl} ...`); + CouchDb.couchdb = n; + return CouchDb.couchdb; + } +} diff --git a/src/datasources/issues.ts b/src/datasources/issues.ts index d200c37..126ef1d 100644 --- a/src/datasources/issues.ts +++ b/src/datasources/issues.ts @@ -2,23 +2,28 @@ import { RedmineTypes } from '@app/redmine-types/index'; import { Injectable, Logger } from '@nestjs/common'; import configuration from '../configs/app'; import nano = require('nano'); +import { CouchDb } from './couchdb'; const config = configuration(); @Injectable() export class Issues { private static logger = new Logger(Issues.name); + private static issuesDb = null; static async getDatasource(): Promise< nano.DocumentScope > { - Issues.logger.debug(`Issues datasource url = ${config.couchDbUrl}`); - const n = nano(config.couchDbUrl); + if (Issues.issuesDb) { + return Issues.issuesDb; + } + const n = CouchDb.getCouchDb(); const dbs = await n.db.list(); - Issues.logger.debug(`Issues datasource db name = ${config.dbs.issues}`); if (!dbs.includes(config.dbs.issues)) { await n.db.create(config.dbs.issues); } - return await n.db.use(config.dbs.issues); + Issues.issuesDb = await n.db.use(config.dbs.issues); + Issues.logger.log(`Connected to issues db - ${config.dbs.issues}`); + return Issues.issuesDb; } } diff --git a/src/datasources/users.ts b/src/datasources/users.ts new file mode 100644 index 0000000..684c318 --- /dev/null +++ b/src/datasources/users.ts @@ -0,0 +1,27 @@ +import { RedmineTypes } from '@app/redmine-types/index'; +import { Injectable, Logger } from '@nestjs/common'; +import nano from 'nano'; +import { CouchDb } from './couchdb'; +import configuration from '../configs/app'; + +const config = configuration(); + +@Injectable() +export class Users { + private static logger = new Logger(Users.name); + private static usersDb = null; + + static async getUsers(): Promise> { + if (Users.usersDb) { + return Users.usersDb; + } + const n = CouchDb.getCouchDb(); + const dbs = await n.db.list(); + if (!dbs.includes(config.dbs.users)) { + await n.db.create(config.dbs.users); + } + Users.usersDb = await n.db.use(config.dbs.users); + Users.logger.log(`Connected to users db - ${config.dbs.users}`); + return Users.usersDb; + } +}