-- Task 7 chat identity snapshots, query and delivery indexes. ALTER TABLE "messages" ADD COLUMN "sender_public_id" UUID; UPDATE "messages" AS m SET "sender_public_id" = p."public_id" FROM "anonymous_profiles" AS p WHERE p."account_id" = m."sender_id"; -- Legacy/seed rows may predate anonymous profiles. Preserve an unlinkable -- snapshot instead of deriving or exposing the private account identifier. UPDATE "messages" SET "sender_public_id" = gen_random_uuid() WHERE "sender_public_id" IS NULL; ALTER TABLE "messages" ALTER COLUMN "sender_public_id" SET NOT NULL; -- Outbox events already provide durable message event dedupe. CREATE INDEX "messages_conversation_seq_inbox_idx" ON "messages" ("conversation_id", "seq"); CREATE INDEX "conversation_members_account_conversation_idx" ON "conversation_members" ("account_id", "conversation_id") WHERE "left_at" IS NULL; CREATE INDEX "conversations_last_message_cursor_idx" ON "conversations" ("last_message_at" DESC, "id" DESC); CREATE INDEX "sanctions_active_account_idx" ON "sanctions" ("account_id", "starts_at", "expires_at") WHERE "revoked_at" IS NULL;