axe/internal/db/migrations/0010_user_confirmation.sql
2026-10-18 22:07:25 +03:00

32 lines
2.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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;