diff --git a/clube67/newwhats.local/backend/src/modules/whatsapp/handlers/MessageHandler.ts b/clube67/newwhats.local/backend/src/modules/whatsapp/handlers/MessageHandler.ts index 8fc436f..686d1b1 100644 --- a/clube67/newwhats.local/backend/src/modules/whatsapp/handlers/MessageHandler.ts +++ b/clube67/newwhats.local/backend/src/modules/whatsapp/handlers/MessageHandler.ts @@ -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')