axe/internal/db/migrations/0010_user_confirmation.sql

32 lines
2.3 KiB
MySQL
Raw Permalink Normal View History

2026-10-18 19:07:25 +00:00
-- 0010_user_confirmation — подтверждение аккаунта после регистрации.
--
-- Саморегистрация (POST /auth/register) создаёт неподтверждённого
-- клиента: войти нельзя (Login → 403 account not confirmed), пока
-- подтверждение не выставит админ (POST /users/:id/confirm).
-- До этой миграции SMTP и подтверждения не было вовсе — поэтому
-- бэкфилл помечает существующих пользователей подтверждёнными.
--
-- Правила, проверяемые в SQL, а не в хендлерах:
-- * подтверждает админ — любой неподтверждённый аккаунт; клиент —
-- только созданного им мастера (ConfirmUser: обе ветки в WHERE,
-- чужой мастер и несуществующий id неразличимы — 404);
-- * повторное подтверждение отсекает WHERE confirmed_at IS NULL
-- (иначе 409 already confirmed);
-- * создание админом = подтверждение сразу («создатель и есть
-- подтверждающий») — в том же INSERT, что и создание строки;
-- * созданные админом аккаунты работают без дополнительных кликов.
--
-- confirmed_by/created_by — ON DELETE SET NULL: удалённый создатель
-- не должен ломать каскадное удаление профилей.
--
-- Применённый файл не редактировать (checksum в schema_migrations).
ALTER TABLE profiles
ADD COLUMN confirmed_at timestamptz, -- NULL — ждёт подтверждения
ADD COLUMN confirmed_by uuid REFERENCES profiles(id) ON DELETE SET NULL,
ADD COLUMN created_by uuid REFERENCES profiles(id) ON DELETE SET NULL;
-- Бэкфилл: подтверждения раньше не существовало, все существующие
-- аккаунты обязаны входить как прежде.
UPDATE profiles SET confirmed_at = now() WHERE confirmed_at IS NULL;