From b3020fe9e0c171f2d7b1779a5e5319097c982249 Mon Sep 17 00:00:00 2001 From: Pedro Howat Date: Tue, 1 Oct 2024 10:59:36 -0300 Subject: [PATCH] Work in progress of new text search endpoint --- .../kwik/controllers/kwik.controller.ts | 43 +++++++++++++++++++ .../integrations/kwik/routes/kwik.router.ts | 18 ++++++++ 2 files changed, 61 insertions(+) diff --git a/src/api/integrations/kwik/controllers/kwik.controller.ts b/src/api/integrations/kwik/controllers/kwik.controller.ts index d9ed07d9..6d27e401 100644 --- a/src/api/integrations/kwik/controllers/kwik.controller.ts +++ b/src/api/integrations/kwik/controllers/kwik.controller.ts @@ -8,6 +8,14 @@ import { WAMonitoringService } from '../../../services/monitor.service'; const logger = new Logger('KwikController'); +type SearchObject = { + text_search: string; + where: { + owner: string; + messageTimestamp: Record; // Generic key-value pair + }[]; +}; + export class KwikController { constructor(private readonly waMonitor: WAMonitoringService) {} @@ -184,4 +192,39 @@ export class KwikController { }; } } + + public async textSearch({ instanceName }: InstanceDto, query: SearchObject) { + logger.error('request received in textSearch'); + logger.error(instanceName); + logger.error(query); + + const db = configService.get('DATABASE'); + const connection = dbserver.getClient().db(db.CONNECTION.DB_PREFIX_NAME + '-whatsapp-api'); + query.where.forEach((w) => { + logger.error(w.messageTimestamp); + logger.error(w.owner); + }); + const messages = await connection + .collection('messages') + .find({ + // $and: [ + // { + // $or: query.where, + // }, + // { + $text: { $search: query.text_search }, + // }, + // ], + }) + .limit(10) + .toArray(); + + // const conversations = messages.map((m) => `${m.owner}#${m.key.remoteJid}#${m.messageTimestamp}`); + // logger.error('DELETEME: messages -> '); + // logger.error(conversations); + + // logger.error(messages.length); + + return { messages }; + } } diff --git a/src/api/integrations/kwik/routes/kwik.router.ts b/src/api/integrations/kwik/routes/kwik.router.ts index effa2b2e..d33c877a 100644 --- a/src/api/integrations/kwik/routes/kwik.router.ts +++ b/src/api/integrations/kwik/routes/kwik.router.ts @@ -70,6 +70,24 @@ export class KwikRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }); + + this.router.post(this.routerPath('textSearch'), ...guards, async (req, res) => { + logger.verbose('request received in textSearch'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + + const response = await this.dataValidate({ + request: req, + schema: null, + ClassRef: InstanceDto, + execute: (instance) => kwikController.textSearch(instance, req.body), + }); + + return res.status(HttpStatus.OK).json(response); + }); } public readonly router = Router();