-- 迁移：租户管理员用户名大小写不敏感
-- 日期：2026-03-23
-- 原因：登录时用户名应不区分大小写，避免 Admin/admin 被视为不同账号
-- 影响：auth.tenant_admins 表
-- 回滚：见文件末尾

-- 1. 将现有用户名统一转小写（幂等：已经是小写的不受影响）
UPDATE auth.tenant_admins
SET username = LOWER(username)
WHERE username != LOWER(username);

-- 2. 创建大小写不敏感的唯一索引（替代原 UNIQUE 约束的语义）
--    原 UNIQUE 约束仍保留（防止完全相同的用户名），此索引额外覆盖大小写变体
CREATE UNIQUE INDEX IF NOT EXISTS idx_tenant_admins_username_lower
    ON auth.tenant_admins (LOWER(username))
    WHERE deleted_at IS NULL;

-- ── 回滚 SQL ──
-- DROP INDEX IF EXISTS auth.idx_tenant_admins_username_lower;
-- （用户名小写化不可逆，但不影响功能）

-- ── 验证 SQL ──
-- 1. 确认索引存在
-- SELECT indexname FROM pg_indexes WHERE tablename = 'tenant_admins' AND indexname = 'idx_tenant_admins_username_lower';
-- 2. 确认无大写用户名残留
-- SELECT username FROM auth.tenant_admins WHERE username != LOWER(username);
-- 3. 测试大小写不敏感插入冲突
-- INSERT INTO auth.tenant_admins (username, password_hash, tenant_id, managed_site_ids) VALUES ('TESTDUP', 'x', 1, '{1}');
-- INSERT INTO auth.tenant_admins (username, password_hash, tenant_id, managed_site_ids) VALUES ('testdup', 'x', 1, '{1}');
-- 第二条应报 unique violation
