-- Create content management tables -- Migration: 017_create_content_tables.up.sql -- Static pages table CREATE TABLE IF NOT EXISTS static_pages ( id TEXT PRIMARY KEY, slug TEXT UNIQUE NOT NULL, title TEXT NOT NULL, content TEXT, meta_description TEXT, seo_keywords JSONB DEFAULT '[]'::jsonb, status VARCHAR(20) DEFAULT 'draft', visibility VARCHAR(20) DEFAULT 'public', template VARCHAR(100), published_at TIMESTAMP WITH TIME ZONE, created_by TEXT, updated_by TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create indexes for static_pages CREATE INDEX IF NOT EXISTS idx_static_pages_slug ON static_pages(slug); CREATE INDEX IF NOT EXISTS idx_static_pages_status ON static_pages(status); CREATE INDEX IF NOT EXISTS idx_static_pages_published_at ON static_pages(published_at); -- Announcements table CREATE TABLE IF NOT EXISTS announcements ( id TEXT PRIMARY KEY, title TEXT NOT NULL, content TEXT NOT NULL, priority VARCHAR(20) DEFAULT 'normal', display_type VARCHAR(20) DEFAULT 'banner', target_audience VARCHAR(20) DEFAULT 'all', target_groups JSONB DEFAULT '[]'::jsonb, start_date TIMESTAMP WITH TIME ZONE, end_date TIMESTAMP WITH TIME ZONE, is_active BOOLEAN DEFAULT TRUE, views BIGINT DEFAULT 0, clicks BIGINT DEFAULT 0, dismissals BIGINT DEFAULT 0, created_by TEXT, updated_by TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create indexes for announcements CREATE INDEX IF NOT EXISTS idx_announcements_is_active ON announcements(is_active); CREATE INDEX IF NOT EXISTS idx_announcements_start_date ON announcements(start_date); CREATE INDEX IF NOT EXISTS idx_announcements_end_date ON announcements(end_date); CREATE INDEX IF NOT EXISTS idx_announcements_priority ON announcements(priority); -- Media assets table CREATE TABLE IF NOT EXISTS media_assets ( id TEXT PRIMARY KEY, filename TEXT NOT NULL, original_name TEXT NOT NULL, url TEXT NOT NULL, type VARCHAR(20) NOT NULL, mime_type VARCHAR(100), size BIGINT, width INTEGER, height INTEGER, duration INTEGER, alt_text TEXT, tags JSONB DEFAULT '[]'::jsonb, uploaded_by TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create indexes for media_assets CREATE INDEX IF NOT EXISTS idx_media_assets_type ON media_assets(type); CREATE INDEX IF NOT EXISTS idx_media_assets_created_at ON media_assets(created_at);