refactor: flatten monorepo structure to backend/ frontend/ devops/
Rename subdirectories for a cleaner single-repo layout: - website-monitoring-backend/ → backend/ - website-monitoring-frontend/ → frontend/ - website-monitoring-devops/ → devops/ Update all references in package.json scripts, CI workflows, docker-compose, pre-commit hooks, and documentation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
-- Supabase Database Fixes for Website Monitoring Frontend
|
||||
-- Run this in your Supabase SQL editor
|
||||
|
||||
-- 0. Create missing enum types if they don't exist
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE scan_status AS ENUM (
|
||||
'pending',
|
||||
'queued',
|
||||
'running',
|
||||
'completed',
|
||||
'failed',
|
||||
'cancelled'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE severity_level AS ENUM (
|
||||
'critical',
|
||||
'high',
|
||||
'medium',
|
||||
'low',
|
||||
'info'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE comparison_operator AS ENUM (
|
||||
'less_than',
|
||||
'less_than_equal',
|
||||
'greater_than',
|
||||
'greater_than_equal',
|
||||
'equal_to',
|
||||
'not_equal_to'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE metric_category AS ENUM (
|
||||
'performance',
|
||||
'seo',
|
||||
'accessibility',
|
||||
'best_practices',
|
||||
'security',
|
||||
'pwa'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE resource_type AS ENUM (
|
||||
'script',
|
||||
'stylesheet',
|
||||
'image',
|
||||
'font',
|
||||
'document',
|
||||
'media',
|
||||
'other'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE notification_channel AS ENUM (
|
||||
'email',
|
||||
'slack',
|
||||
'webhook',
|
||||
'in_app'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE subscription_tier AS ENUM (
|
||||
'free',
|
||||
'starter',
|
||||
'professional',
|
||||
'enterprise'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE user_role AS ENUM (
|
||||
'owner',
|
||||
'admin',
|
||||
'editor',
|
||||
'viewer'
|
||||
);
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
|
||||
-- 1. Add missing columns to scans table
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS scheduled_at TIMESTAMPTZ;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS trigger_type VARCHAR DEFAULT 'manual';
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS website_id UUID REFERENCES websites(id);
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS triggered_by UUID REFERENCES users(id);
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS scan_type VARCHAR DEFAULT 'full';
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 1;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS categories TEXT[] DEFAULT ARRAY['performance', 'seo', 'accessibility', 'best_practices'];
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS device_type VARCHAR DEFAULT 'desktop';
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS user_agent VARCHAR;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS lighthouse_version VARCHAR;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS chrome_version VARCHAR;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS environment JSONB DEFAULT '{}'::jsonb;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS started_at TIMESTAMPTZ DEFAULT NOW();
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS completed_at TIMESTAMPTZ;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS duration_ms INTEGER;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS error_message TEXT;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS retry_count INTEGER DEFAULT 0;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb;
|
||||
ALTER TABLE scans ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ DEFAULT NOW();
|
||||
|
||||
-- 2. Add missing columns to scan_results table if they don't exist
|
||||
ALTER TABLE scan_results ADD COLUMN IF NOT EXISTS raw_data JSONB DEFAULT '{}'::jsonb;
|
||||
|
||||
-- 3. Add missing columns to metric_values table if they don't exist
|
||||
ALTER TABLE metric_values ADD COLUMN IF NOT EXISTS raw_value VARCHAR;
|
||||
ALTER TABLE metric_values ADD COLUMN IF NOT EXISTS unit VARCHAR;
|
||||
ALTER TABLE metric_values ADD COLUMN IF NOT EXISTS is_passing BOOLEAN;
|
||||
|
||||
-- 4. Add missing columns to resource_analysis table if they don't exist
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS transfer_size_bytes INTEGER;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS duration_ms INTEGER;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS is_third_party BOOLEAN DEFAULT false;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS is_cached BOOLEAN;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS compression_ratio NUMERIC;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS mime_type VARCHAR;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS protocol VARCHAR;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS priority VARCHAR;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS status_code INTEGER;
|
||||
ALTER TABLE resource_analysis ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb;
|
||||
|
||||
-- 5. Add missing columns to alert_configurations table if they don't exist
|
||||
ALTER TABLE alert_configurations ADD COLUMN IF NOT EXISTS consecutive_count INTEGER DEFAULT 1;
|
||||
ALTER TABLE alert_configurations ADD COLUMN IF NOT EXISTS cooldown_minutes INTEGER DEFAULT 60;
|
||||
ALTER TABLE alert_configurations ADD COLUMN IF NOT EXISTS notification_template TEXT;
|
||||
ALTER TABLE alert_configurations ADD COLUMN IF NOT EXISTS last_triggered_at TIMESTAMPTZ;
|
||||
|
||||
-- 6. Add missing columns to alerts table if they don't exist
|
||||
ALTER TABLE alerts ADD COLUMN IF NOT EXISTS details JSONB DEFAULT '{}'::jsonb;
|
||||
ALTER TABLE alerts ADD COLUMN IF NOT EXISTS acknowledged_by UUID REFERENCES users(id);
|
||||
ALTER TABLE alerts ADD COLUMN IF NOT EXISTS acknowledged_at TIMESTAMPTZ;
|
||||
ALTER TABLE alerts ADD COLUMN IF NOT EXISTS resolved_at TIMESTAMPTZ;
|
||||
|
||||
-- 7. Add missing columns to crawl_queue table if they don't exist
|
||||
ALTER TABLE crawl_queue ADD COLUMN IF NOT EXISTS discovery_depth INTEGER DEFAULT 0;
|
||||
ALTER TABLE crawl_queue ADD COLUMN IF NOT EXISTS attempts INTEGER DEFAULT 0;
|
||||
ALTER TABLE crawl_queue ADD COLUMN IF NOT EXISTS parent_url VARCHAR;
|
||||
ALTER TABLE crawl_queue ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 1;
|
||||
ALTER TABLE crawl_queue ADD COLUMN IF NOT EXISTS error_message TEXT;
|
||||
ALTER TABLE crawl_queue ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb;
|
||||
|
||||
-- 8. Add missing columns to crawl_sessions table if they don't exist
|
||||
ALTER TABLE crawl_sessions ADD COLUMN IF NOT EXISTS pages_discovered INTEGER DEFAULT 0;
|
||||
ALTER TABLE crawl_sessions ADD COLUMN IF NOT EXISTS pages_processed INTEGER DEFAULT 0;
|
||||
ALTER TABLE crawl_sessions ADD COLUMN IF NOT EXISTS current_url VARCHAR;
|
||||
ALTER TABLE crawl_sessions ADD COLUMN IF NOT EXISTS error_message TEXT;
|
||||
ALTER TABLE crawl_sessions ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb;
|
||||
|
||||
-- 9. Create indexes if they don't exist
|
||||
CREATE INDEX IF NOT EXISTS idx_scans_scheduled_at ON scans(scheduled_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_scan_results_category ON scan_results(category);
|
||||
CREATE INDEX IF NOT EXISTS idx_metric_values_created_at ON metric_values(created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_resource_analysis_type ON resource_analysis(resource_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_alerts_status ON alerts(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_crawl_queue_status_priority ON crawl_queue(status, priority);
|
||||
CREATE INDEX IF NOT EXISTS idx_crawl_sessions_status ON crawl_sessions(status);
|
||||
|
||||
-- 10. Add RLS policies if they don't exist (basic ones)
|
||||
-- Note: You may need to customize these based on your security requirements
|
||||
|
||||
-- Enable RLS on all tables
|
||||
ALTER TABLE scans ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE scan_results ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE metric_values ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE resource_analysis ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE alert_configurations ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE alerts ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE crawl_queue ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE crawl_sessions ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Basic RLS policies (you may want to customize these)
|
||||
CREATE POLICY IF NOT EXISTS "Users can view scans for their organization" ON scans
|
||||
FOR SELECT USING (
|
||||
website_id IN (
|
||||
SELECT id FROM websites WHERE organization_id IN (
|
||||
SELECT organization_id FROM users WHERE id = auth.uid()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE POLICY IF NOT EXISTS "Users can insert scans for their organization" ON scans
|
||||
FOR INSERT WITH CHECK (
|
||||
website_id IN (
|
||||
SELECT id FROM websites WHERE organization_id IN (
|
||||
SELECT organization_id FROM users WHERE id = auth.uid()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE POLICY IF NOT EXISTS "Users can update scans for their organization" ON scans
|
||||
FOR UPDATE USING (
|
||||
website_id IN (
|
||||
SELECT id FROM websites WHERE organization_id IN (
|
||||
SELECT organization_id FROM users WHERE id = auth.uid()
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
-- Similar policies for other tables...
|
||||
-- (You may want to add more comprehensive RLS policies based on your needs)
|
||||
|
||||
-- 11. Refresh Supabase schema cache to pick up new columns
|
||||
-- This is important to resolve "Could not find column in schema cache" errors
|
||||
NOTIFY pgrst, 'reload schema';
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user