fix(history): salva mediaPayload em processHistoryBatch + recupera msgs antigas
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:
@@ -372,6 +372,7 @@ export class MessageHandler {
|
||||
null
|
||||
|
||||
const isGroup = jid.endsWith('@g.us')
|
||||
const isMed = this.isMediaMessage(contentType)
|
||||
return [{
|
||||
tenantId: this.tenantId,
|
||||
instanceId: this.instanceId,
|
||||
@@ -387,12 +388,33 @@ export class MessageHandler {
|
||||
senderJid: isGroup ? (key.participant ?? null) : null,
|
||||
status: 'READ' as const, // históricas são consideradas já lidas
|
||||
timestamp: ts,
|
||||
// Salva payload para permitir re-download posterior via /redownload-media
|
||||
...(isMed ? { mediaPayload: this.buildMediaPayload(key, message) as any } : {}),
|
||||
}]
|
||||
})
|
||||
|
||||
if (rows.length > 0) {
|
||||
const { count } = await prisma.message.createMany({ data: rows, skipDuplicates: true })
|
||||
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) {
|
||||
logger.error({ err, jid }, '[History] Erro ao salvar mensagens do chat')
|
||||
|
||||
Reference in New Issue
Block a user