"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.invalidateChatListCache = invalidateChatListCache;
/**
 * chat.cache.ts — Invalidação centralizada do cache da listagem de chats.
 *
 * O cache é populado em GET /api/chats com TTL de 30s.
 * Esta função invalida todas as variações (archived, limit) para um par
 * tenant+instance — uma nova mensagem ou alteração no chat força refetch.
 *
 * Usa SCAN ao invés de KEYS para não bloquear o DragonflyDB em prod.
 */
const dragonfly_1 = require("../../infra/cache/dragonfly");
const logger_1 = require("../../config/logger");
/**
 * Remove todas as chaves de cache da listagem de chats para um instance.
 * Pattern: chats:list:{tenantId}:{instanceId}:*
 * Operação fire-and-forget: erros são logados mas não propagados.
 */
async function invalidateChatListCache(tenantId, instanceId) {
    if (!dragonfly_1.dragonfly.isAlive())
        return;
    try {
        const client = dragonfly_1.dragonfly.raw();
        const pattern = `chats:list:${tenantId}:${instanceId}:*`;
        const stream = client.scanStream({ match: pattern, count: 100 });
        const keys = [];
        await new Promise((resolve, reject) => {
            stream.on('data', (batch) => {
                for (const k of batch)
                    keys.push(k);
            });
            stream.on('end', () => resolve());
            stream.on('error', (err) => reject(err));
        });
        if (keys.length > 0) {
            await client.del(...keys);
        }
    }
    catch (err) {
        logger_1.logger.warn({ err, tenantId, instanceId }, '[chat.cache] Falha ao invalidar cache (ignorado)');
    }
}
//# sourceMappingURL=chat.cache.js.map