Spaces:
Sleeping
Sleeping
| -- DocVerify AI — Supabase Migration | |
| -- Run this in the Supabase SQL Editor: https://app.supabase.com/project/uymdjpfognbqcsotjztr/sql | |
| -- Create documents table | |
| CREATE TABLE IF NOT EXISTS documents ( | |
| id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::text, | |
| doc_type VARCHAR(32) NOT NULL, | |
| status VARCHAR(64) NOT NULL DEFAULT 'Pending', | |
| confidence_score FLOAT, | |
| flags TEXT NOT NULL DEFAULT '[]', | |
| extracted_fields TEXT NOT NULL DEFAULT '{}', | |
| text_source VARCHAR(16), | |
| original_filename VARCHAR(255), | |
| masked_image_path VARCHAR(512), | |
| verification_status VARCHAR(64), | |
| -- OCR data | |
| full_text TEXT, | |
| score_breakdown TEXT, | |
| ocr_confidence FLOAT, | |
| -- Review fields | |
| reviewer_notes TEXT, | |
| reviewed_by VARCHAR(128), | |
| reviewed_at TIMESTAMPTZ, | |
| -- Image storage as base64 for cloud persistence | |
| image_base64 TEXT, | |
| masked_image_base64 TEXT, | |
| created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), | |
| updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() | |
| ); | |
| -- Gemini AI audit fields (additive — safe on existing tables) | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS gemini_model VARCHAR(64); | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS gemini_raw_json TEXT; | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS forgery_score FLOAT; | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS forgery_reason TEXT; | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS ai_confidence FLOAT; | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS ai_powered BOOLEAN DEFAULT FALSE; | |
| ALTER TABLE documents ADD COLUMN IF NOT EXISTS gemini_key_index SMALLINT; | |
| -- Index for fast queries | |
| CREATE INDEX IF NOT EXISTS idx_documents_doc_type ON documents(doc_type); | |
| CREATE INDEX IF NOT EXISTS idx_documents_status ON documents(status); | |
| CREATE INDEX IF NOT EXISTS idx_documents_created_at ON documents(created_at DESC); | |
| -- Auto-update updated_at | |
| CREATE OR REPLACE FUNCTION update_updated_at() | |
| RETURNS TRIGGER AS $$ | |
| BEGIN | |
| NEW.updated_at = NOW(); | |
| RETURN NEW; | |
| END; | |
| $$ LANGUAGE plpgsql; | |
| DROP TRIGGER IF EXISTS trg_documents_updated_at ON documents; | |
| CREATE TRIGGER trg_documents_updated_at | |
| BEFORE UPDATE ON documents | |
| FOR EACH ROW | |
| EXECUTE FUNCTION update_updated_at(); | |
| -- Enable Row Level Security (optional, adjust for your auth setup) | |
| -- ALTER TABLE documents ENABLE ROW LEVEL SECURITY; | |