fix(history): salva mediaPayload em processHistoryBatch + recupera msgs antigas
continuous-integration/webhook Deploy concluido com sucesso (VPS 4)

processHistoryBatch não incluía mediaPayload no createMany, tornando
impossível o re-download de mídias recebidas via history sync (que é a
maioria das mensagens ao reconectar a sessão).

1. Inclui mediaPayload no objeto de cada row para mensagens de mídia.
2. Após o createMany, dispara updateMany para preencher mediaPayload em
   registros que já existiam no DB com o campo null (mensagens antigas
   recebidas antes desta correção), sem bloquear o event loop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-05-12 03:58:10 +02:00
parent 1efc0ab1d1
commit 12268c24ab
@@ -372,6 +372,7 @@ export class MessageHandler {
null null
const isGroup = jid.endsWith('@g.us') const isGroup = jid.endsWith('@g.us')
const isMed = this.isMediaMessage(contentType)
return [{ return [{
tenantId: this.tenantId, tenantId: this.tenantId,
instanceId: this.instanceId, instanceId: this.instanceId,
@@ -387,12 +388,33 @@ export class MessageHandler {
senderJid: isGroup ? (key.participant ?? null) : null, senderJid: isGroup ? (key.participant ?? null) : null,
status: 'READ' as const, // históricas são consideradas já lidas status: 'READ' as const, // históricas são consideradas já lidas
timestamp: ts, timestamp: ts,
// Salva payload para permitir re-download posterior via /redownload-media
...(isMed ? { mediaPayload: this.buildMediaPayload(key, message) as any } : {}),
}] }]
}) })
if (rows.length > 0) { if (rows.length > 0) {
const { count } = await prisma.message.createMany({ data: rows, skipDuplicates: true }) const { count } = await prisma.message.createMany({ data: rows, skipDuplicates: true })
totalSaved += count totalSaved += count
// Recupera mediaPayload para mensagens de mídia que já existiam no DB
// sem esse campo (criadas antes desta correção ou via path antigo).
// Roda em paralelo sem bloquear o loop principal.
const mediaRows = rows.filter(r => r.mediaPayload != null)
if (mediaRows.length > 0) {
Promise.all(
mediaRows.map(r =>
prisma.message.updateMany({
where: {
instanceId: this.instanceId,
messageId: r.messageId,
mediaPayload: null,
},
data: { mediaPayload: r.mediaPayload },
}).catch(() => {})
)
).catch(() => {})
}
} }
} catch (err) { } catch (err) {
logger.error({ err, jid }, '[History] Erro ao salvar mensagens do chat') logger.error({ err, jid }, '[History] Erro ao salvar mensagens do chat')