-- 1. VERIFICATIONS TABLE CREATE TABLE IF NOT EXISTS verifications ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, role_key VARCHAR(50) NOT NULL, status VARCHAR(50) NOT NULL DEFAULT 'PENDING', -- PENDING, UNDER_REVIEW, DOCUMENTS_REQUESTED, REVISION_REQUESTED, APPROVED, REJECTED priority VARCHAR(10) NOT NULL DEFAULT 'LOW', -- HIGH, MEDIUM, LOW case_type VARCHAR(50) NOT NULL, -- PROFILE, PORTFOLIO, JOB, REQUIREMENT payload JSONB NOT NULL DEFAULT '{}', -- full submission data documents JSONB NOT NULL DEFAULT '[]', -- list of documents [{id, title, url, status}] notes TEXT, rejection_reason TEXT, assigned_to UUID REFERENCES users(id) ON DELETE SET NULL, -- Admin/Employee ID created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- 2. VERIFICATION LOGS (History of actions) CREATE TABLE IF NOT EXISTS verification_logs ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), verification_id UUID NOT NULL REFERENCES verifications(id) ON DELETE CASCADE, action VARCHAR(50) NOT NULL, -- STATUS_CHANGE, NOTE_ADDED, DOCS_REQUESTED, REASSIGNED actor_id UUID REFERENCES users(id) ON DELETE SET NULL, old_status VARCHAR(50), new_status VARCHAR(50), message TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- 3. INDEXES CREATE INDEX IF NOT EXISTS idx_verifications_user_id ON verifications(user_id); CREATE INDEX IF NOT EXISTS idx_verifications_status ON verifications(status); CREATE INDEX IF NOT EXISTS idx_verifications_case_type ON verifications(case_type); CREATE INDEX IF NOT EXISTS idx_verification_logs_ver_id ON verification_logs(verification_id);