pos-be/src/modules/configuration/couch/data/services/couch.service.ts

62 lines
1.7 KiB
TypeScript

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) {}
}
}