Files
hyungi_document_server/migrations/261_documents_source_external_id_uq.sql
T
hyungi c49047bf2a feat(email): schema for email source_external_id + metadata
migrations 259~261:
- documents.source_external_id TEXT NULL (email 에선 always non-null, ingest 책임)
- documents.email_metadata JSONB NULL (from/to/cc/subject/folder/uidvalidity/uid/received_at/attachments)
- partial unique on (source_external_id) WHERE source_channel = email AND source_external_id IS NOT NULL

ORM:
- Document.source_external_id / email_metadata mapped_column 추가

dedup 진실원장 = DB unique index. server-side IMAP \\Seen flag 는 best-effort.
mailplus_archive 의 INBOX root archive row 는 source_external_id=NULL 이라 unique 에서 자연 제외.

plan: ~/.claude/plans/document-enchanted-candy.md
2026-05-12 06:56:23 +00:00

8 lines
453 B
SQL

-- PR-4 Email Ingest — partial unique on (source_external_id) for email source
-- inbox_ingest 의 dedup 진실원장. 같은 메일 재 ingest 시 ON CONFLICT DO NOTHING.
-- mailplus_archive 의 INBOX root archive row 는 source_external_id=NULL 이라 자동 제외.
CREATE UNIQUE INDEX IF NOT EXISTS uq_documents_email_source_external_id
ON documents (source_external_id)
WHERE source_channel = 'email' AND source_external_id IS NOT NULL;