From 3a955889f0a981f71b2282fef2e11f47eb001573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sun, 4 Oct 2026 19:14:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E5=90=8E=E5=8F=B0=E5=A5=91=E7=BA=A6):?= =?UTF-8?q?=20=E4=BC=9A=E5=91=98=E8=AF=A6=E6=83=85=20plan/status/cycle=5Fk?= =?UTF-8?q?ind=20=E6=94=B6=E5=8F=A3=E4=B8=BA=20token=20=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - shared-contracts 新增 ProfileMembershipStatusToken(normal/active) - AdminProfileMembershipPayload 的 plan/status/cycle_kind 由 String 改为 ProfileMembershipPlanToken/ProfileMembershipStatusToken/ProfileMembershipCycleKindToken,未知值在反序列化即被拒(评审第 13 条) - module-runtime 补 RuntimeProfileMembershipStatus -> ProfileMembershipStatusToken 的 From 映射 - api-server 的 map_membership 改为直接 .into(),去掉 as_str().to_string() --- .../crates/api-server/src/admin_recharge.rs | 6 +++--- server-rs/crates/module-runtime/src/domain.rs | 11 +++++++++++ server-rs/crates/shared-contracts/src/admin.rs | 7 ++++--- .../crates/shared-contracts/src/runtime.rs | 17 +++++++++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/server-rs/crates/api-server/src/admin_recharge.rs b/server-rs/crates/api-server/src/admin_recharge.rs index 805ca679c..1f64311a4 100644 --- a/server-rs/crates/api-server/src/admin_recharge.rs +++ b/server-rs/crates/api-server/src/admin_recharge.rs @@ -1014,9 +1014,9 @@ fn map_membership_order_change( fn map_membership(record: RuntimeProfileMembershipRecord) -> AdminProfileMembershipPayload { AdminProfileMembershipPayload { - plan: record.plan.as_str().to_string(), - status: record.status.as_str().to_string(), - cycle_kind: record.cycle_kind.as_str().to_string(), + plan: record.plan.into(), + status: record.status.into(), + cycle_kind: record.cycle_kind.into(), cycle_index: record.cycle_index, cycle_count: record.cycle_count, cycle_granted_points: record.cycle_granted_points, diff --git a/server-rs/crates/module-runtime/src/domain.rs b/server-rs/crates/module-runtime/src/domain.rs index 0bfe73391..3dbbbe694 100644 --- a/server-rs/crates/module-runtime/src/domain.rs +++ b/server-rs/crates/module-runtime/src/domain.rs @@ -1423,6 +1423,17 @@ impl From } } +impl From + for shared_contracts::runtime::ProfileMembershipStatusToken +{ + fn from(value: RuntimeProfileMembershipStatus) -> Self { + match value { + RuntimeProfileMembershipStatus::Normal => Self::Normal, + RuntimeProfileMembershipStatus::Active => Self::Active, + } + } +} + impl From for shared_contracts::runtime::ProfileMembershipModelAccessToken { diff --git a/server-rs/crates/shared-contracts/src/admin.rs b/server-rs/crates/shared-contracts/src/admin.rs index a0ff50bbd..adf1c2b46 100644 --- a/server-rs/crates/shared-contracts/src/admin.rs +++ b/server-rs/crates/shared-contracts/src/admin.rs @@ -5,6 +5,7 @@ use serde_json::Value; use crate::runtime::{ ProfileMembershipChangeKindToken, ProfileMembershipCycleKindToken, ProfileMembershipPlanToken, + ProfileMembershipStatusToken, }; #[cfg(any())] @@ -1335,9 +1336,9 @@ pub struct AdminUserDetailResponse { #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct AdminProfileMembershipPayload { - pub plan: String, - pub status: String, - pub cycle_kind: String, + pub plan: ProfileMembershipPlanToken, + pub status: ProfileMembershipStatusToken, + pub cycle_kind: ProfileMembershipCycleKindToken, pub cycle_index: u32, pub cycle_count: u32, pub cycle_granted_points: u64, diff --git a/server-rs/crates/shared-contracts/src/runtime.rs b/server-rs/crates/shared-contracts/src/runtime.rs index fc576d464..3e7f3e3db 100644 --- a/server-rs/crates/shared-contracts/src/runtime.rs +++ b/server-rs/crates/shared-contracts/src/runtime.rs @@ -289,6 +289,23 @@ impl ProfileMembershipCycleKindToken { } } +/// 会员状态 token;与前端 `ProfileMembershipStatus` 联合类型一一对应。 +#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum ProfileMembershipStatusToken { + Normal, + Active, +} + +impl ProfileMembershipStatusToken { + pub fn as_str(&self) -> &'static str { + match self { + Self::Normal => "normal", + Self::Active => "active", + } + } +} + /// 模型权限 token;与前端 `ProfileMembershipModelAccess` 一一对应。 #[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")]