From 6c70e1dce706b39fc88021205383e7aeca3cb6eb Mon Sep 17 00:00:00 2001 From: borja Date: Fri, 5 Sep 2025 18:20:58 +0200 Subject: [PATCH] feat: persistir respuestas en la cola con DB Co-authored-by: aider (openrouter/openai/gpt-5) --- src/services/response-queue.ts | 37 ++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/services/response-queue.ts b/src/services/response-queue.ts index d7c3ac6..6a9409a 100644 --- a/src/services/response-queue.ts +++ b/src/services/response-queue.ts @@ -1,14 +1,47 @@ +import type { Database } from 'bun:sqlite'; +import { db } from '../db'; + type QueuedResponse = { recipient: string; message: string; }; export const ResponseQueue = { + // Permite inyectar una DB distinta en tests si se necesita + dbInstance: db as Database, + + // Conservamos la cola en memoria por compatibilidad, aunque no se usa para persistencia queue: [] as QueuedResponse[], async add(responses: QueuedResponse[]) { - this.queue.push(...responses); - console.log('Queued responses:', responses); + try { + const botNumber = process.env.CHATBOT_PHONE_NUMBER; + const filtered = responses.filter(r => + r.recipient && + r.message && + (!botNumber || r.recipient !== botNumber) + ); + + if (filtered.length === 0) { + return; + } + + const insert = this.dbInstance.prepare(` + INSERT INTO response_queue (recipient, message) + VALUES (?, ?) + `); + + this.dbInstance.transaction((rows: QueuedResponse[]) => { + for (const r of rows) { + insert.run(r.recipient, r.message); + } + })(filtered); + + console.log('Queued responses (persisted):', filtered.length); + } catch (err) { + console.error('Failed to persist queued responses:', err); + throw err; + } }, async process() {