diff --git a/src/api/integrations/kwik/controllers/kwik.controller.ts b/src/api/integrations/kwik/controllers/kwik.controller.ts index 094ca6c0..3c7e758b 100644 --- a/src/api/integrations/kwik/controllers/kwik.controller.ts +++ b/src/api/integrations/kwik/controllers/kwik.controller.ts @@ -9,6 +9,14 @@ import { SettingsService } from '../../../services/settings.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, private readonly settingsService: SettingsService) {} @@ -198,4 +206,39 @@ export class KwikController { return { status: 'ok' }; } + + 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 b0c78f14..c23947b8 100644 --- a/src/api/integrations/kwik/routes/kwik.router.ts +++ b/src/api/integrations/kwik/routes/kwik.router.ts @@ -72,19 +72,13 @@ export class KwikRouter extends RouterBroker { }); this.router.post(this.routerPath('cleanChats'), ...guards, async (req, res) => { + logger.verbose('request received in cleanChats'); logger.verbose('request received in cleanChats'); logger.verbose('request body: '); logger.verbose(req.body); - logger.verbose('request query: '); logger.verbose(req.query); - logger.error('request received in cleanChats'); - logger.error('request body: '); - logger.error(req.body); - logger.error('request query: '); - logger.error(req.query); - const response = await this.dataValidate({ request: req, schema: null, @@ -94,6 +88,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();