Spaces:
Running
Running
aviseth
feat: Phase 1 enhancements - ensemble endpoint, history API, rate limiting, storage monitoring
1a5863d | -- Phase 2: User Analysis History Database Migration | |
| -- This script creates the user_analysis_history table and related indexes | |
| -- Execute this in your Supabase SQL Editor | |
| -- Step 1: Create the user_analysis_history table | |
| CREATE TABLE IF NOT EXISTS user_analysis_history ( | |
| id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), | |
| session_id VARCHAR(36) NOT NULL, | |
| article_id VARCHAR(36) NOT NULL UNIQUE, | |
| text_preview VARCHAR(200) NOT NULL, | |
| predicted_label VARCHAR(50) NOT NULL CHECK (predicted_label IN ('True', 'Fake', 'Satire', 'Bias')), | |
| confidence FLOAT NOT NULL CHECK (confidence >= 0.0 AND confidence <= 1.0), | |
| model_name VARCHAR(100) NOT NULL, | |
| created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, | |
| CONSTRAINT fk_article FOREIGN KEY (article_id) REFERENCES predictions(article_id) ON DELETE CASCADE | |
| ); | |
| -- Step 2: Create indexes for efficient queries | |
| CREATE INDEX IF NOT EXISTS idx_history_session_created ON user_analysis_history(session_id, created_at DESC); | |
| CREATE INDEX IF NOT EXISTS idx_history_article ON user_analysis_history(article_id); | |
| -- Step 3: Enable row-level security | |
| ALTER TABLE user_analysis_history ENABLE ROW LEVEL SECURITY; | |
| -- Step 4: Create policy to allow all operations (for development) | |
| -- Note: In production, you should restrict this based on your security requirements | |
| DROP POLICY IF EXISTS "allow_all_history" ON user_analysis_history; | |
| CREATE POLICY "allow_all_history" ON user_analysis_history FOR ALL USING (true) WITH CHECK (true); | |
| -- Step 5: Verify the table was created | |
| SELECT | |
| table_name, | |
| column_name, | |
| data_type, | |
| is_nullable, | |
| column_default | |
| FROM information_schema.columns | |
| WHERE table_name = 'user_analysis_history' | |
| ORDER BY ordinal_position; | |
| -- Step 6: Verify indexes were created | |
| SELECT | |
| indexname, | |
| indexdef | |
| FROM pg_indexes | |
| WHERE tablename = 'user_analysis_history'; | |
| -- Step 7: Verify RLS policy was created | |
| SELECT | |
| policyname, | |
| permissive, | |
| roles, | |
| cmd | |
| FROM pg_policies | |
| WHERE tablename = 'user_analysis_history'; | |
| -- Optional: Insert a test record to verify everything works | |
| -- Uncomment the following lines to test (replace with actual article_id from predictions table) | |
| /* | |
| DO $$ | |
| DECLARE | |
| test_article_id VARCHAR(36); | |
| test_session_id VARCHAR(36); | |
| BEGIN | |
| -- First, insert a test prediction | |
| test_article_id := gen_random_uuid()::text; | |
| test_session_id := gen_random_uuid()::text; | |
| INSERT INTO predictions (article_id, text, predicted_label, confidence, model_name) | |
| VALUES (test_article_id, 'Test article for migration verification', 'True', 0.95, 'ensemble'); | |
| -- Then, insert a test history record | |
| INSERT INTO user_analysis_history (session_id, article_id, text_preview, predicted_label, confidence, model_name) | |
| VALUES (test_session_id, test_article_id, 'Test article for migration verification', 'True', 0.95, 'ensemble'); | |
| -- Verify the record was inserted | |
| IF EXISTS (SELECT 1 FROM user_analysis_history WHERE article_id = test_article_id) THEN | |
| RAISE NOTICE 'Test record inserted successfully!'; | |
| ELSE | |
| RAISE EXCEPTION 'Test record insertion failed!'; | |
| END IF; | |
| -- Clean up test data | |
| DELETE FROM user_analysis_history WHERE article_id = test_article_id; | |
| DELETE FROM predictions WHERE article_id = test_article_id; | |
| RAISE NOTICE 'Test data cleaned up. Migration verification complete!'; | |
| END $$; | |
| */ | |