64 lines
3.3 KiB
SQL
64 lines
3.3 KiB
SQL
-- Таблицы админки (Блок 4.1): шаблоны сообщений, история изменений и расписания.
|
|
-- Схема bot.* уже создана миграцией V1.
|
|
|
|
-- Тексты сообщений: источник правды для админки (бот подключается в 4.5).
|
|
CREATE TABLE IF NOT EXISTS bot.message_templates (
|
|
key text PRIMARY KEY,
|
|
text text NOT NULL,
|
|
description text NOT NULL DEFAULT '',
|
|
enabled boolean NOT NULL DEFAULT true,
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_by bigint
|
|
);
|
|
|
|
COMMENT ON TABLE bot.message_templates IS 'Шаблоны сообщений бота (редактируются в админке)';
|
|
COMMENT ON COLUMN bot.message_templates.key IS 'Стабильный ключ шаблона (например, info.help)';
|
|
COMMENT ON COLUMN bot.message_templates.updated_by IS 'Telegram-ID администратора, последним изменившего текст';
|
|
|
|
-- История правок: старые значения и автор (аудит + откат).
|
|
CREATE TABLE IF NOT EXISTS bot.message_template_history (
|
|
id bigserial PRIMARY KEY,
|
|
key text NOT NULL REFERENCES bot.message_templates (key) ON DELETE CASCADE,
|
|
old_text text,
|
|
new_text text NOT NULL,
|
|
editor_id bigint,
|
|
changed_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_template_history_key_time
|
|
ON bot.message_template_history (key, changed_at DESC);
|
|
|
|
COMMENT ON TABLE bot.message_template_history IS 'История изменений шаблонов (кто, когда, старое и новое значение)';
|
|
|
|
-- Расписания рассылок: редактирует админка, исполняет бот (4.5).
|
|
CREATE TABLE IF NOT EXISTS bot.schedules (
|
|
id bigserial PRIMARY KEY,
|
|
template_key text NOT NULL REFERENCES bot.message_templates (key) ON DELETE RESTRICT,
|
|
hour smallint NOT NULL CHECK (hour BETWEEN 0 AND 23),
|
|
minute smallint NOT NULL CHECK (minute BETWEEN 0 AND 59),
|
|
weekdays smallint[] NOT NULL DEFAULT '{}',
|
|
timezone text NOT NULL DEFAULT 'Europe/Moscow',
|
|
enabled boolean NOT NULL DEFAULT true,
|
|
description text NOT NULL DEFAULT '',
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_by bigint
|
|
);
|
|
|
|
COMMENT ON TABLE bot.schedules IS 'Расписания рассылок (исполняет бот, редактирует админка)';
|
|
COMMENT ON COLUMN bot.schedules.weekdays IS 'Дни недели 1..7 (ISO, 1 = понедельник); пусто — каждый день';
|
|
|
|
-- История изменений расписаний: снимок строки до и после правки.
|
|
CREATE TABLE IF NOT EXISTS bot.schedules_history (
|
|
id bigserial PRIMARY KEY,
|
|
schedule_id bigint NOT NULL REFERENCES bot.schedules (id) ON DELETE CASCADE,
|
|
old_data jsonb,
|
|
new_data jsonb NOT NULL,
|
|
editor_id bigint,
|
|
changed_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_schedules_history_schedule_time
|
|
ON bot.schedules_history (schedule_id, changed_at DESC);
|
|
|
|
COMMENT ON TABLE bot.schedules_history IS 'История изменений расписаний (аудит)';
|