|
|
|
|
@ -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() {
|
|
|
|
|
|