diff --git a/server-rs/crates/module-runtime/src/membership/catalog.rs b/server-rs/crates/module-runtime/src/membership/catalog.rs index e7d2860e3..681cf9aa9 100644 --- a/server-rs/crates/module-runtime/src/membership/catalog.rs +++ b/server-rs/crates/module-runtime/src/membership/catalog.rs @@ -173,10 +173,11 @@ pub fn resolve_runtime_profile_membership_plan_snapshot( } /// 升级比较基准:目录里的 `rank`(`Normal = 0`,越大越高)。 -pub fn runtime_profile_membership_plan_rank(plan: RuntimeProfileMembershipPlan) -> u8 { - resolve_runtime_profile_membership_plan_row(plan) - .map(|row| row.rank) - .unwrap_or(0) +/// +/// 返回 `Option` 是为了把「目录缺行」显式化:不再用 `unwrap_or(0)` 把缺失伪装成 `Normal`, +/// 否则缺失会被 `check_..._allowed` 误判成「目标不高于当前」→ 误报 `NotUpgrade`。 +pub fn runtime_profile_membership_plan_rank(plan: RuntimeProfileMembershipPlan) -> Option { + resolve_runtime_profile_membership_plan_row(plan).map(|row| row.rank) } /// 只有在售档位可以下单:`Normal` 与下架档位都不允许购买。 @@ -371,15 +372,15 @@ mod tests { fn plan_rank_follows_catalog_order() { assert_eq!( runtime_profile_membership_plan_rank(RuntimeProfileMembershipPlan::Normal), - 0 + Some(0) ); assert_eq!( runtime_profile_membership_plan_rank(RuntimeProfileMembershipPlan::Plus), - 2 + Some(2) ); assert_eq!( runtime_profile_membership_plan_rank(RuntimeProfileMembershipPlan::Max), - 4 + Some(4) ); }