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