33 lines
1,017 B
TypeScript
33 lines
1,017 B
TypeScript
import { RedmineTypes } from '@app/redmine-types/index';
|
|
import { Injectable, Logger } from '@nestjs/common';
|
|
import configuration from '../configs/main-config';
|
|
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;
|
|
private static initialized = false;
|
|
|
|
static async getDatasource(): Promise<nano.DocumentScope<RedmineTypes.Issue> | null> {
|
|
if (Issues.initialized) {
|
|
return Issues.issuesDb;
|
|
}
|
|
Issues.initialized = true;
|
|
const n = CouchDb.getCouchDb();
|
|
if (!n) {
|
|
return null;
|
|
}
|
|
const issueDbName = config.couchDb?.dbs.issues || 'issues';
|
|
const dbs = await n.db.list();
|
|
if (!dbs.includes(issueDbName)) {
|
|
await n.db.create(issueDbName);
|
|
}
|
|
Issues.issuesDb = await n.db.use(issueDbName);
|
|
Issues.logger.log(`Connected to issues db - ${issueDbName}`);
|
|
return Issues.issuesDb;
|
|
}
|
|
}
|