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