feat: persistir respuestas en la cola con DB

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
pull/1/head
borja 2 months ago
parent fe1bbcaa92
commit 6c70e1dce7

@ -1,14 +1,47 @@
import type { Database } from 'bun:sqlite';
import { db } from '../db';
type QueuedResponse = { type QueuedResponse = {
recipient: string; recipient: string;
message: string; message: string;
}; };
export const ResponseQueue = { 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[], queue: [] as QueuedResponse[],
async add(responses: QueuedResponse[]) { async add(responses: QueuedResponse[]) {
this.queue.push(...responses); try {
console.log('Queued responses:', responses); 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() { async process() {

Loading…
Cancel
Save