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

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

31 lines
1.2 KiB
SQL

-- User statuses per organization
CREATE TABLE IF NOT EXISTS "user_statuses" (
"id" SERIAL PRIMARY KEY,
"organization_id" INTEGER NOT NULL REFERENCES "organizations"("id") ON DELETE CASCADE,
"name" VARCHAR(100) NOT NULL,
"color" VARCHAR(7) DEFAULT '#e5e7eb',
"is_default" BOOLEAN DEFAULT FALSE,
"position" INTEGER DEFAULT 0,
"created_at" TIMESTAMP DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS "idx_user_statuses_organization_id" ON "user_statuses"("organization_id");
CREATE UNIQUE INDEX IF NOT EXISTS "idx_user_statuses_organization_default" ON "user_statuses"("organization_id") WHERE "is_default" = TRUE;
ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "status_id" INTEGER REFERENCES "user_statuses"("id") ON DELETE SET NULL;
CREATE INDEX IF NOT EXISTS "idx_users_status_id" ON "users"("status_id");
-- Backfill default status for existing organizations
INSERT INTO "user_statuses" ("organization_id", "name", "color", "is_default", "position")
SELECT id, 'Зарегистрирован', '#e5e7eb', TRUE, 0
FROM "organizations"
ON CONFLICT DO NOTHING;
UPDATE "users" u
SET "status_id" = (
SELECT s.id FROM "user_statuses" s
WHERE s.organization_id = u.organization_id AND s.is_default = TRUE
LIMIT 1
)
WHERE u.status_id IS NULL;