Files
iistwin/migrations/0050_user_sessions_token_family.sql
Ильяс Султанов 1f5ecb6da4 fix(number-fields): избегаем потери точности длинных чисел
- number-поля теперь рендерятся как text + inputMode=numeric,
  чтобы браузер не округлял значения через input type=number
- пробелы при вставке в number-поля удаляются
- бэкенд нормализует значения number-полей в строку перед сохранением
- добавлен хелпер normalizeFieldValueForStorage

Closes: искажение расчётного счёта и других длинных числовых полей
2026-07-07 21:03:40 +03:00

24 lines
1.1 KiB
SQL

-- Add token family support to user_sessions for refresh token rotation
ALTER TABLE "user_sessions"
ADD COLUMN IF NOT EXISTS "family_id" UUID,
ADD COLUMN IF NOT EXISTS "family_created_at" TIMESTAMP,
ADD COLUMN IF NOT EXISTS "parent_refresh_token" VARCHAR(500),
ADD COLUMN IF NOT EXISTS "is_replaced" BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS "replaced_by_token" VARCHAR(500),
ADD COLUMN IF NOT EXISTS "is_revoked" BOOLEAN NOT NULL DEFAULT FALSE;
-- Backfill existing sessions: each existing session becomes its own family
UPDATE "user_sessions"
SET "family_id" = gen_random_uuid(),
"family_created_at" = COALESCE("created_at", NOW())
WHERE "family_id" IS NULL;
-- Make family columns NOT NULL after backfill
ALTER TABLE "user_sessions"
ALTER COLUMN "family_id" SET NOT NULL,
ALTER COLUMN "family_created_at" SET NOT NULL;
-- Indexes for family lookups and reuse detection
CREATE INDEX IF NOT EXISTS "user_sessions_family_id_idx" ON "user_sessions" ("family_id");
CREATE INDEX IF NOT EXISTS "user_sessions_parent_refresh_token_idx" ON "user_sessions" ("parent_refresh_token");