Добавлен новый коннект к базе пользователей в couchdb

This commit is contained in:
Pavel Gnedov 2022-06-17 10:45:16 +07:00
parent 3120b3a0a6
commit bf3b5d2b5f
5 changed files with 63 additions and 5 deletions

View file

@ -12,6 +12,8 @@ import { Issues } from './datasources/issues';
import configuration from './configs/app'; import configuration from './configs/app';
import { RedmineEventsGateway } from '@app/event-emitter/events/redmine-events.gateway'; import { RedmineEventsGateway } from '@app/event-emitter/events/redmine-events.gateway';
import { RedmineTypes } from '@app/redmine-types/index'; import { RedmineTypes } from '@app/redmine-types/index';
import { CouchDb } from './datasources/couchdb';
import { Users } from './datasources/users';
@Module({ @Module({
imports: [ imports: [
@ -22,7 +24,7 @@ import { RedmineTypes } from '@app/redmine-types/index';
ConfigModule.forRoot({ load: [configuration] }), ConfigModule.forRoot({ load: [configuration] }),
], ],
controllers: [AppController, MainController], controllers: [AppController, MainController],
providers: [AppService, Issues], providers: [AppService, Issues, CouchDb, Users],
}) })
export class AppModule implements OnModuleInit { export class AppModule implements OnModuleInit {
private logger = new Logger(AppModule.name); private logger = new Logger(AppModule.name);

View file

@ -6,6 +6,9 @@ const appConfig = {
issues: issues:
process.env['ELTEX_REDMINE_HELPER_COUCHDB_ISSUES_DB_NAME'] || process.env['ELTEX_REDMINE_HELPER_COUCHDB_ISSUES_DB_NAME'] ||
'redmine_issues', 'redmine_issues',
users:
process.env['ELTEX_REDMINE_HELPER_COUCHDB_USERS_DB_NAME'] ||
'redmine_users',
}, },
}; };

View file

@ -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;
}
}

View file

@ -2,23 +2,28 @@ import { RedmineTypes } from '@app/redmine-types/index';
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import configuration from '../configs/app'; import configuration from '../configs/app';
import nano = require('nano'); import nano = require('nano');
import { CouchDb } from './couchdb';
const config = configuration(); const config = configuration();
@Injectable() @Injectable()
export class Issues { export class Issues {
private static logger = new Logger(Issues.name); private static logger = new Logger(Issues.name);
private static issuesDb = null;
static async getDatasource(): Promise< static async getDatasource(): Promise<
nano.DocumentScope<RedmineTypes.Issue> nano.DocumentScope<RedmineTypes.Issue>
> { > {
Issues.logger.debug(`Issues datasource url = ${config.couchDbUrl}`); if (Issues.issuesDb) {
const n = nano(config.couchDbUrl); return Issues.issuesDb;
}
const n = CouchDb.getCouchDb();
const dbs = await n.db.list(); const dbs = await n.db.list();
Issues.logger.debug(`Issues datasource db name = ${config.dbs.issues}`);
if (!dbs.includes(config.dbs.issues)) { if (!dbs.includes(config.dbs.issues)) {
await n.db.create(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;
} }
} }

27
src/datasources/users.ts Normal file
View file

@ -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<nano.DocumentScope<RedmineTypes.User>> {
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;
}
}