-- ===================================================================== -- ДИНАМИЧЕСКИЕ ЛИМИТЫ ТРАФИКА ПРОКСИ -- ===================================================================== -- data_limit_bytes = NULL означает безлимит. Лимит читается прокси-сервером -- на каждой проверке (POST /api/v1/internal/validate) и на каждом отчёте о -- расходе (POST /api/v1/internal/usage) — админ меняет его в любой момент -- через PATCH /api/v1/admin/users/{id}/limit без перезапуска прокси. ALTER TABLE users ADD COLUMN IF NOT EXISTS data_limit_bytes BIGINT; ALTER TABLE users ADD COLUMN IF NOT EXISTS data_used_bytes BIGINT NOT NULL DEFAULT 0; ALTER TABLE users ADD COLUMN IF NOT EXISTS data_period_reset_at TIMESTAMPTZ; -- Дефолтный лимит тарифа — проставляется юзеру в data_limit_bytes при покупке -- подписки (см. AppRepository::buy_subscription), чтобы не заводить отдельный -- админ-флоу на каждую покупку. NULL = тариф без предустановленного лимита. ALTER TABLE plans ADD COLUMN IF NOT EXISTS default_limit_bytes BIGINT; -- ===================================================================== -- MAGIC-LINK ВХОД ЧЕРЕЗ TELEGRAM-БОТА ДЛЯ ДЕСКТОП/МОБИЛЬНОГО ПРИЛОЖЕНИЯ -- ===================================================================== -- auth_sessions была создана в 0001_init.sql, но 0002_refresh_sessions.sql -- (репурпоз черновика Magic Link под refresh-токены) её DROP'нул и не -- пересоздал — на любой БД, накатываемой с нуля (CI, sqlx::test, новый -- инстанс), следующий ALTER TABLE падал на несуществующей таблице. CREATE -- TABLE IF NOT EXISTS чинит fresh-инсталл; ALTER/CREATE INDEX ниже остаются -- IF NOT EXISTS на случай окружений, где таблица уже существует в старом виде. CREATE TABLE IF NOT EXISTS auth_sessions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID, auth_code VARCHAR(8) NOT NULL UNIQUE, is_verified BOOLEAN NOT NULL DEFAULT FALSE, expires_at TIMESTAMPTZ NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); ALTER TABLE auth_sessions ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(); CREATE INDEX IF NOT EXISTS idx_auth_sessions_code ON auth_sessions(auth_code);