feat(templates): личные шаблоны серверов в хранилище и API (Фаза 7)
AGENT.md 7.3: свои шаблоны серверов — сохранить структуру сервера
(роли с правами и цветом, категории и комнаты) и создать по ней новый.
Миграция 00023 создаёт guild_templates (structure_json, source_guild_id,
каскад по владельцу) с индексом владельца.
- store: CRUD личных шаблонов с фильтром по owner_id и защитой лимитов
(20 шаблонов, 16 КиБ structure_json);
- server: POST /guild-templates, GET /guild-templates/mine и
DELETE /guild-templates/{id} (MANAGE_GUILD, чужой шаблон — 404),
создание сервера по template_id=personal:<id> (аудит template=personal:<id>);
- структура шаблона повторяет API ролей (права строкой) и хранит
slowmode_seconds, user_limit и категорию по имени.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
-- +goose Up
|
||||
-- Фаза 7: личные шаблоны серверов (AGENT.md 7.3).
|
||||
--
|
||||
-- Шаблон — приватная сущность пользователя: он виден и используется только
|
||||
-- владельцем (owner_id), поэтому у таблицы нет guild_id и связанных с ним
|
||||
-- прав. structure_json хранит структуру в том же виде, что внутренний
|
||||
-- guildTemplate: роли с цветом и правами, категории и комнаты. source_guild_id
|
||||
-- — сервер, с которого структура снята; при удалении сервера ссылка
|
||||
-- обнуляется, а сам шаблон остаётся рабочим. Вместе с пользователем его
|
||||
-- шаблоны удаляются каскадом.
|
||||
CREATE TABLE guild_templates (
|
||||
id INTEGER PRIMARY KEY,
|
||||
owner_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
structure_json TEXT NOT NULL,
|
||||
source_guild_id INTEGER REFERENCES guilds (id) ON DELETE SET NULL,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
CREATE INDEX guild_templates_owner_idx ON guild_templates (owner_id, id DESC);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE guild_templates;
|
||||
Reference in New Issue
Block a user