-- 1.0.384 verify: UATAdminA 应绑定 UAT_FUNCTION_USER 并能解析出菜单。
--
-- 约定（AutoVersionUpdate.RunVerifyScriptIfExists）：
--   每条语句取「首行首列」当布尔断言，必须为真（非 0 / 非 NULL / 非空串）。
--   返回 0 行会得到 NULL → 判假 → 抛异常并中断启动。
--   因此断言一律写成 SELECT ... 返回标量 1，不要写「期望 0 行」式的查询。
--
-- 环境容错：本脚本随仓库分发到所有环境，而 UATAdminA / UAT_FUNCTION_USER
--   只存在于特定 UAT 库。账号不存在时主脚本为空操作，故断言同样短路为真，
--   避免在无该账号的库上误判失败。

-- 1) 绑定已建立（账号不存在的库短路为真）
SELECT IF(
  (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0,
  1,
  (SELECT COUNT(*)
     FROM SysUserRole ur
     JOIN SysUser u ON u.Id = ur.UserId
     JOIN SysRole r ON r.Id = ur.RoleId
    WHERE u.Account = 'UATAdminA'
      AND r.Code = 'UAT_FUNCTION_USER')
) AS ok_binding;

-- 2) 该账号可解析出菜单（role_menus > 0，同租户对照账号为 308）
SELECT IF(
  (SELECT COUNT(*) FROM SysUser WHERE Account = 'UATAdminA' AND Status = 1) = 0,
  1,
  (SELECT COUNT(DISTINCT rm.MenuId)
     FROM SysUser u
     JOIN SysUserRole ur ON ur.UserId = u.Id
     JOIN SysRoleMenu rm ON rm.RoleId = ur.RoleId
    WHERE u.Account = 'UATAdminA')
) AS ok_menus;

-- 3) 幂等性：不存在重复绑定（重复执行本脚本不产生第二条相同 UserId+RoleId）
SELECT IF(
  (SELECT COUNT(*) FROM (
     SELECT ur.UserId, ur.RoleId
       FROM SysUserRole ur
       JOIN SysUser u ON u.Id = ur.UserId
      WHERE u.Account = 'UATAdminA'
      GROUP BY ur.UserId, ur.RoleId
     HAVING COUNT(*) > 1
   ) dup) = 0,
  1, 0
) AS ok_no_duplicate;
