From 064112e73132a47c8fd06ba40277239cde1a7e9b Mon Sep 17 00:00:00 2001 From: shancheas Date: Mon, 14 Apr 2025 12:06:05 +0700 Subject: [PATCH] feat: add clear couch transaction API --- .../couch/data/services/couch.service.ts | 38 +++++++++++++++++++ .../couch/infrastructure/couch.controller.ts | 13 ++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/modules/configuration/couch/data/services/couch.service.ts b/src/modules/configuration/couch/data/services/couch.service.ts index 60f031d..3aa6132 100644 --- a/src/modules/configuration/couch/data/services/couch.service.ts +++ b/src/modules/configuration/couch/data/services/couch.service.ts @@ -19,6 +19,7 @@ export class CouchService { } async onModuleInit() { + // return; const nano = this.nanoInstance; for (const database of DatabaseListen) { const db = nano.db.use(database); @@ -95,4 +96,41 @@ export class CouchService { return null; } } + + getUnixTimestampLast7Days() { + const date = new Date(); + date.setDate(date.getDate() - 4); + date.setHours(0, 0, 0, 0); + return date.getTime(); + } + + public async clearTransactions() { + const nano = this.nanoInstance; + const transaction = nano.use('transaction'); + + const expiredDate = this.getUnixTimestampLast7Days(); + + const selectorPayment = { + created_at: { + $lt: expiredDate, + }, + }; + + const transactions = await transaction.find({ + selector: selectorPayment, + fields: ['_id', '_rev'], + limit: 100000, + }); + + const { docs } = transactions; + console.log(docs.length); + const deletedDocs = { + docs: docs.map((doc) => ({ + _id: doc._id, + _rev: doc._rev, + _deleted: true, + })), + }; + await transaction.bulk(deletedDocs); + } } diff --git a/src/modules/configuration/couch/infrastructure/couch.controller.ts b/src/modules/configuration/couch/infrastructure/couch.controller.ts index c7a9d5c..379b13c 100644 --- a/src/modules/configuration/couch/infrastructure/couch.controller.ts +++ b/src/modules/configuration/couch/infrastructure/couch.controller.ts @@ -5,13 +5,17 @@ import { Public } from 'src/core/guards'; import * as Nano from 'nano'; import { CreateUserPrivilegeDto } from 'src/modules/user-related/user-privilege/infrastructure/dto/create-user-privilege.dto'; import { ConfigService } from '@nestjs/config'; +import { CouchService } from '../data/services/couch.service'; @ApiTags(`couch`) @Controller('v1/couch') @Public() @Injectable() export class CouchDataController { - constructor(private configService: ConfigService) {} + constructor( + private configService: ConfigService, + private couchService: CouchService, + ) {} get nanoInstance() { const couchConfiguration = this.configService.get('COUCHDB_CONFIG'); @@ -64,4 +68,11 @@ export class CouchDataController { // return people.get(); } catch (error) {} } + + @Public(true) + @Get('clear-transactions') + async clearTransactions(): Promise { + await this.couchService.clearTransactions(); + return 'OK'; + } } -- 2.40.1