Initial commit — Умный Байт landing

This commit is contained in:
2026-05-13 09:32:45 +03:00
commit 9e21350def
37 changed files with 1950 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
-- =====================================================
-- 001_initial.sql — начальная схема БД для лендинга
-- =====================================================
CREATE TABLE IF NOT EXISTS admin_users (
id SERIAL PRIMARY KEY,
login VARCHAR(64) UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
last_login TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS sections (
id SERIAL PRIMARY KEY,
key VARCHAR(64) UNIQUE NOT NULL,
title TEXT NOT NULL,
content_json JSONB NOT NULL DEFAULT '{}'::jsonb,
is_active BOOLEAN NOT NULL DEFAULT true,
sort_order INTEGER NOT NULL DEFAULT 0,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS products (
id SERIAL PRIMARY KEY,
slug VARCHAR(64) UNIQUE NOT NULL,
title VARCHAR(128) NOT NULL,
subtitle VARCHAR(256),
description TEXT NOT NULL,
status VARCHAR(32) NOT NULL DEFAULT 'production',
audience VARCHAR(32),
icon_key VARCHAR(64),
tags JSONB NOT NULL DEFAULT '[]'::jsonb,
is_published BOOLEAN NOT NULL DEFAULT true,
sort_order INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS approach_items (
id SERIAL PRIMARY KEY,
title VARCHAR(128) NOT NULL,
description TEXT NOT NULL,
icon_key VARCHAR(64),
sort_order INTEGER NOT NULL DEFAULT 0,
is_active BOOLEAN NOT NULL DEFAULT true
);
CREATE TABLE IF NOT EXISTS settings (
key VARCHAR(64) PRIMARY KEY,
value TEXT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_products_published_sorted
ON products(is_published, sort_order) WHERE is_published = true;
CREATE INDEX IF NOT EXISTS idx_sections_active_sorted
ON sections(is_active, sort_order) WHERE is_active = true;
CREATE INDEX IF NOT EXISTS idx_approach_active_sorted
ON approach_items(is_active, sort_order) WHERE is_active = true;