turash/bugulma/backend/migrations/postgres/017_create_content_tables.up.sql

77 lines
2.6 KiB
SQL
Executable File

-- 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);