M
-- Add constraints safely (ignore if already exist)DO $$ BEGIN ALTER TABLE active_draft_orders ADD CONSTRAINT active_draft_orders_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE;EXCEPTION WHEN duplicate_object OR duplicate_table THEN NULL;END $$;DO $$ BEGIN ALTER TABLE active_draft_orders ADD CONSTRAINT active_draft_orders_customer_id_key UNIQUE (customer_id);EXCEPTION WHEN duplicate_object OR duplicate_table THEN NULL;END $$;DO $$ BEGIN ALTER TABLE active_draft_orders ADD CONSTRAINT active_draft_orders_phone_number_key UNIQUE (phone_number);EXCEPTION WHEN duplicate_object OR duplicate_table THEN NULL;END $$;ALTER TABLE supplier_performance ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;ALTER TABLE system_config ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;-- Create update triggerCREATE OR REPLACE FUNCTION update_updated_at_column()RETURNS TRIGGER AS $$BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW;END;$$ LANGUAGE plpgsql;-- Apply to all tables with updated_atDO $$DECLARE t text;BEGIN FOR t IN SELECT table_name FROM information_schema.columns WHERE column_name = 'updated_at' AND table_schema = 'public' LOOP EXECUTE format('DROP TRIGGER IF EXISTS trg_updated_at ON %I', t); EXECUTE format('CREATE TRIGGER trg_updated_at BEFORE UPDATE ON %I FOR EACH ROW EXECUTE FUNCTION update_updated_at_column()', t); END LOOP;END $$;-- Create dashboard_stats viewCREATE OR REPLACE VIEW dashboard_stats ASSELECT (SELECT COUNT(*) FROM suppliers) as total_suppliers, (SELECT COUNT(*) FROM suppliers WHERE is_held = TRUE) as held_suppliers, (SELECT COUNT(*) FROM customers) as total_customers, (SELECT COUNT(*) FROM customers WHERE is_debtable = TRUE) as debtable_customers, (SELECT COUNT(*) FROM customer_requests WHERE status = 'open') as open_requests, (SELECT COUNT(*) FROM customer_requests WHERE status = 'closed') as closed_requests, (SELECT COUNT(*) FROM quotes) as total_quotes, (SELECT COALESCE(SUM(amount), 0) FROM fees_archive WHERE is_paid = FALSE) as total_unpaid_fees, NOW() as calculated_at;-- Sample suppliersINSERT INTO suppliers (company_name, city, seller_name, phone_number, location, rating_avg, brands, maps) VALUES('تشليح الخليج', 'الرياض', 'احمد شلاش', '966501234567', 'العزيزية', 4.3, ARRAY['تويوتا', 'هيونداي'], 'https://maps.example.com/1'),('تشليح الطيارات', 'الرياض', 'محمد مرضي', '966501234568', 'السلي', 4.8, ARRAY['تويوتا', 'فورد', 'شفروليه'], 'https://maps.example.com/2'),('تشليح العاصمة', 'الرياض', 'عبدالاله ثواب', '966501234569', 'الحائر', 4.1, ARRAY['نيسان', 'هيونداي'], 'https://maps.example.com/3'),('تشليح المتحدة', 'الرياض', 'حامد ابو عسل', '966501234570', 'الشفا', 3.9, ARRAY['تويوتا', 'شفروليه'], 'https://maps.example.com/4'),('تشليح الرياض الحديث', 'الرياض', 'فراس الاصفر', '966501234571', 'النسيم', 4.5, ARRAY['تويوتا', 'هيونداي', 'كيا'], 'https://maps.example.com/5'),('تشليح جدة السريع', 'جدة', 'احمد الزويد', '966501234572', 'بريمان', 4.7, ARRAY['تويوتا', 'نيسان'], 'https://maps.example.com/6'),('تشليح البحر الأحمر', 'جدة', 'عمر سالم', '966501234573', 'الخمرة', 4.4, ARRAY['هيونداي', 'كيا'], 'https://maps.example.com/7')ON CONFLICT (phone_number) DO UPDATE SET company_name = EXCLUDED.company_name;-- Initialize performance recordsINSERT INTO supplier_performance (supplier_id, total_ignores, total_not_found, penalty_level)SELECT id, 0, 0, 0 FROM suppliersON CONFLICT (supplier_id) DO NOTHING;SELECT 'Database initialized successfully' as status, (SELECT COUNT(*) FROM suppliers) as suppliers_count, (SELECT COUNT(*) FROM customers) as customers_count, (SELECT COUNT(*) FROM customer_requests) as requests_count;
12.02.2026 01:12