CREATE TABLE IF NOT EXISTS admin_users ( id SERIAL PRIMARY KEY, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, created_at TIMESTAMPTZ DEFAULT now() ); CREATE TABLE IF NOT EXISTS service_categories ( id SERIAL PRIMARY KEY, slug TEXT UNIQUE NOT NULL, title TEXT NOT NULL, description TEXT DEFAULT '', icon TEXT DEFAULT 'Server', sort_order INT NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS service_items ( id SERIAL PRIMARY KEY, category_id INT NOT NULL REFERENCES service_categories(id) ON DELETE CASCADE, name TEXT NOT NULL, price_text TEXT NOT NULL, period TEXT DEFAULT '', note TEXT DEFAULT '', sort_order INT NOT NULL DEFAULT 0, active BOOLEAN NOT NULL DEFAULT true ); CREATE TABLE IF NOT EXISTS promotions ( id SERIAL PRIMARY KEY, title TEXT NOT NULL, price_text TEXT NOT NULL, old_price_text TEXT, description TEXT DEFAULT '', active BOOLEAN NOT NULL DEFAULT true, sort_order INT NOT NULL DEFAULT 0, created_at TIMESTAMPTZ DEFAULT now() ); CREATE TABLE IF NOT EXISTS reviews ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, role TEXT, rating INT NOT NULL CHECK (rating BETWEEN 1 AND 5), text TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected')), created_at TIMESTAMPTZ DEFAULT now() ); CREATE TABLE IF NOT EXISTS visits ( date DATE PRIMARY KEY, count INT NOT NULL DEFAULT 0 ); CREATE INDEX IF NOT EXISTS idx_service_items_category ON service_items(category_id); CREATE INDEX IF NOT EXISTS idx_reviews_status ON reviews(status);