Files
glchat/internal/database/migrations/00012_webhooks.sql
T
grendervill 2e038a1d3f feat(webhooks): вебхуки комнат — бэкенд, клиент и настройки комнаты
- миграция 00012: таблица webhooks, снимок имени и аватара в messages (AGENT.md 7.11)
- API: список/создание/правка/удаление и пересоздание токена (MANAGE_WEBHOOKS,
  step-up при создании, аудит), загрузка аватара отдельной multipart-ручкой
- исполнение POST /webhooks/{id}/{token} без сессии: content, username,
  avatar_url, файлы создателя вебхука, лимит 30/мин на вебхук
- клиент: пункт настроек «Комната» со списком вебхуков, копированием ссылки,
  пересозданием токена и удалением
- сообщения вебхуков: имя, аватар и значок в ленте вместо «неизвестного автора»
- fix: неполный ответ REST больше не затирает данные READY-снапшота
2026-09-21 00:26:50 +03:00

32 lines
1.7 KiB
SQL

-- +goose Up
-- Вебхуки серверов (AGENT.md 7.11): сообщения без пользовательской сессии.
-- Токен — секрет ссылки исполнения, его можно пересоздать.
CREATE TABLE webhooks (
id INTEGER PRIMARY KEY,
guild_id INTEGER NOT NULL REFERENCES guilds (id) ON DELETE CASCADE,
channel_id INTEGER NOT NULL REFERENCES channels (id) ON DELETE CASCADE,
name TEXT NOT NULL,
avatar_file_id INTEGER REFERENCES files (id) ON DELETE SET NULL,
token TEXT NOT NULL,
created_by INTEGER REFERENCES users (id) ON DELETE SET NULL,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE UNIQUE INDEX webhooks_token_idx ON webhooks (token);
CREATE INDEX webhooks_channel_idx ON webhooks (channel_id, id);
CREATE INDEX webhooks_guild_idx ON webhooks (guild_id, id);
-- Сообщение вебхука: автора-пользователя нет. Имя и аватар сохраняем снимком,
-- чтобы удаление вебхука не меняло уже отправленные сообщения.
ALTER TABLE messages ADD COLUMN webhook_id INTEGER REFERENCES webhooks (id) ON DELETE SET NULL;
ALTER TABLE messages ADD COLUMN webhook_name TEXT NOT NULL DEFAULT '';
ALTER TABLE messages ADD COLUMN webhook_avatar TEXT NOT NULL DEFAULT '';
-- +goose Down
ALTER TABLE messages DROP COLUMN webhook_avatar;
ALTER TABLE messages DROP COLUMN webhook_name;
ALTER TABLE messages DROP COLUMN webhook_id;
DROP INDEX webhooks_guild_idx;
DROP INDEX webhooks_channel_idx;
DROP INDEX webhooks_token_idx;
DROP TABLE webhooks;