-- 迁移脚本：为用户表添加租户内自增UID字段
-- 执行时间：需要手动执行此脚本

-- 1. 为yz_users表添加uid字段
ALTER TABLE yz_users ADD COLUMN uid INT DEFAULT 0 COMMENT '租户内用户ID，自增';

-- 2. 为现有用户分配uid（使用存储过程或手动更新）
-- 方法1：使用存储过程（推荐）
DELIMITER //

CREATE PROCEDURE update_user_uids()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE current_tenant_id INT;
    DECLARE current_id INT;
    DECLARE uid_counter INT DEFAULT 1;

    -- 游标用于遍历所有租户
    DECLARE tenant_cursor CURSOR FOR
        SELECT DISTINCT tenant_id FROM yz_users WHERE delete_time IS NULL ORDER BY tenant_id;

    -- 游标用于遍历每个租户内的用户
    DECLARE user_cursor CURSOR FOR
        SELECT id FROM yz_users
        WHERE tenant_id = current_tenant_id AND delete_time IS NULL
        ORDER BY id;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN tenant_cursor;

    tenant_loop: LOOP
        FETCH tenant_cursor INTO current_tenant_id;
        IF done THEN
            LEAVE tenant_loop;
        END IF;

        SET uid_counter = 1;
        SET done = FALSE;

        OPEN user_cursor;

        user_loop: LOOP
            FETCH user_cursor INTO current_id;
            IF done THEN
                LEAVE user_loop;
            END IF;

            UPDATE yz_users SET uid = uid_counter WHERE id = current_id;
            SET uid_counter = uid_counter + 1;
        END LOOP user_loop;

        CLOSE user_cursor;
        SET done = FALSE;
    END LOOP tenant_loop;

    CLOSE tenant_cursor;
END //

DELIMITER ;

-- 执行存储过程
CALL update_user_uids();

-- 删除存储过程
DROP PROCEDURE update_user_uids();

-- 3. 创建索引以提高查询性能
CREATE INDEX idx_yz_users_tenant_uid ON yz_users(tenant_id, uid);
CREATE INDEX idx_yz_users_uid ON yz_users(uid);

-- 4. 验证迁移结果
-- SELECT tenant_id, uid, username FROM yz_users WHERE delete_time IS NULL ORDER BY tenant_id, uid;

-- 5. 添加注释说明
-- uid字段说明：
-- - 在每个tenant_id下从1开始递增
-- - 不同租户的uid可以重复
-- - 用于租户内的用户标识，避免使用全局id
