mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 09:19:51 +00:00
An inbound message could create a second conversation for a contact under a race (Meta retries a delivery, or a batch fans out to concurrent after() runs). There was no UNIQUE index and no unique-violation backstop on conversations, unlike contacts (migration 022). Worse, once two conversations existed the `.single()` lookup errored on every later message and the webhook created yet another conversation each time, snowballing into a wall of duplicate chats. - findOrCreateConversation now resolves oldest-first with .limit(1) instead of .single(), so pre-existing duplicates converge, and catches 23505 on insert to re-resolve the winning row. - Same hardening applied to the public-API resolver (resolve-conversation). - Migration 036 merges existing duplicate conversations into the oldest thread (re-pointing messages, reactions, deals, flow_runs, notifications, ai_usage_log — no data loss) then adds a UNIQUE (account_id, contact_id) index as the authoritative guarantee. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| 001_initial_schema.sql | ||
| 002_pipelines_enhancements.sql | ||
| 003_broadcast_recipient_wamid.sql | ||
| 004_contact_delete_set_null.sql | ||
| 005_broadcast_counts_incremental.sql | ||
| 006_automations.sql | ||
| 007_automations_increment_counter.sql | ||
| 008_profile_avatars_storage.sql | ||
| 009_message_actions.sql | ||
| 010_flows.sql | ||
| 011_profile_beta_features.sql | ||
| 012_flows_increment_counter.sql | ||
| 013_whatsapp_config_phone_number_id_unique.sql | ||
| 014_message_templates_meta_integration.sql | ||
| 015_whatsapp_config_registration.sql | ||
| 016_flow_media.sql | ||
| 017_account_sharing.sql | ||
| 018_account_member_rpcs.sql | ||
| 019_invitation_rpcs.sql | ||
| 020_account_sharing_followups.sql | ||
| 021_account_default_currency.sql | ||
| 022_contact_phone_dedup.sql | ||
| 023_chat_media.sql | ||
| 024_member_presence.sql | ||
| 025_filter_contacts_by_tags.sql | ||
| 026_api_keys.sql | ||
| 027_notifications.sql | ||
| 028_webhook_endpoints.sql | ||
| 029_ai_reply.sql | ||
| 030_ai_knowledge.sql | ||
| 031_ai_reply_slot_grant.sql | ||
| 032_fix_ai_knowledge_membership.sql | ||
| 033_ai_reply_polish.sql | ||
| 034_fix_profiles_update_rls.sql | ||
| 035_interactive_messages.sql | ||
| 036_conversation_contact_dedup.sql | ||