import { Injectable } from '@nestjs/common'; import { DatabaseListen } from '../../constants'; import { EventBus } from '@nestjs/cqrs'; import { ChangeDocEvent } from '../../domain/events/change-doc.event'; @Injectable() export class CouchService { constructor(private eventBus: EventBus) {} async onModuleInit() { const nano = require('nano')('http://root:password@172.10.10.2:5970'); for (const database of DatabaseListen) { const db = nano.db.use(database); db.changesReader.start({ includeDocs: true }).on('change', (change) => { this.changeDoc(change, database); }); console.log(`start listen database ${database}`); } } private changeDoc(data, database) { this.eventBus.publish( new ChangeDocEvent({ id: data.id, database: database, data: data.doc, }), ); } public async createDoc(data, database) { try { const nano = require('nano')('http://root:password@172.10.10.2:5970'); const db = nano.use(database); return await db.insert(data); } catch (error) {} } public async deleteDoc(data, database) { try { const nano = require('nano')('http://root:password@172.10.10.2:5970'); const db = nano.use(database); const result = await db.get(data.id); await db.destroy(data.id, result._rev); } catch (error) {} } public async updateDoc(data, database) { try { const nano = require('nano')('http://root:password@172.10.10.2:5970'); const db = nano.use(database); const result = await db.get(data.id); console.log(result, 'dsa'); await db.insert({ ...data, _rev: result._rev, }); } catch (error) {} } }