diff --git a/src/app.module.ts b/src/app.module.ts index 37d8aff..2d388e4 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,12 +1,22 @@ import { EventEmitterModule } from '@app/event-emitter'; import { MainController } from '@app/event-emitter/main/main.controller'; +import { RedmineIssuesCacheWriterModule } from '@app/redmine-issues-cache-writer'; import { Module } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { Issues } from './datasources/issues'; +import configuration from './configs/app'; @Module({ - imports: [EventEmitterModule], + imports: [ + EventEmitterModule, + RedmineIssuesCacheWriterModule.register({ + issueDocumentScopeProvider: Issues.getDatasource, + }), + ConfigModule.forRoot({ load: [configuration] }), + ], controllers: [AppController, MainController], - providers: [AppService], + providers: [AppService, Issues], }) export class AppModule {} diff --git a/src/configs/app.ts b/src/configs/app.ts new file mode 100644 index 0000000..bc09d0d --- /dev/null +++ b/src/configs/app.ts @@ -0,0 +1,14 @@ +const appConfig = { + couchDbUrl: + process.env['ELTEX_REDMINE_HELPER_COUCHDB_URL'] || 'http://localhost:5984', + + dbs: { + issues: + process.env['ELTEX_REDMINE_HELPER_COUCHDB_ISSUES_DB_NAME'] || + 'redmine_issues', + }, +}; + +export default () => { + return appConfig; +}; diff --git a/src/datasources/issues.ts b/src/datasources/issues.ts new file mode 100644 index 0000000..cb9f001 --- /dev/null +++ b/src/datasources/issues.ts @@ -0,0 +1,20 @@ +import { RedmineTypes } from '@app/redmine-types/index'; +import { Injectable } from '@nestjs/common'; +import nano from 'nano'; +import configuration from '../configs/app'; + +const config = configuration(); + +@Injectable() +export class Issues { + static async getDatasource(): Promise< + nano.DocumentScope + > { + const n = nano(config.couchDbUrl); + const dbs = await n.db.list(); + if (!dbs.includes(config.dbs.issues)) { + await n.db.create(config.dbs.issues); + } + return await n.db.use(config.dbs.issues); + } +}