Commit Graph

5400 Commits

Author SHA1 Message Date
k88936 4eb4c6ae17 docs(会员): 补充会员账期推进与升级报价的逻辑注释
- profile.rs:advance_profile_membership_cycle_to 补充「锚点恒定、期号可推导、落库仅作单调水位、时钟回拨不重放」说明
- profile.rs:refresh_profile_membership_cycle 补充未换期(含时钟回拨)直接返回的守卫注释
- profile.rs:membership_upgrade_quote_input 注明期号即账期水位、年付补差按剩余整月折算
- profile.rs:build_profile_membership_upgrade_quote_record 与 build_profile_membership_order_snapshot 补充账期口径说明
- upgrade.rs:注明年付补差剩余整月来自单调水位、不会因重复刷新漂移

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 13:31:25 +08:00
k88936 16f92f2110 refactor(会员): 会员档位目录移除无用的 sort_order,统一按 rank 排序
- module-runtime catalog.rs:RuntimeProfileMembershipPlanRecord 与种子目录去掉 sort_order,目录单测改为按 rank 断言
- module-runtime domain.rs/commands.rs:后台改价入参与构建函数去掉 sort_order
- spacetime-module profile.rs:profile_membership_plan 表结构去掉排序列,membership_plan_records 改按 rank 升序读取
- shared-contracts runtime.rs:ProfileMembershipPlanResponse 与 AdminUpsertProfileMembershipPlanRequest 移除 sortOrder
- spacetime-client:客户端签名、mapper 与 module_bindings 同步移除 sortOrder
- api-server runtime_profile.rs:响应构建与测试夹具去掉 sortOrder
- admin-web:AdminMembershipPlanPage 移除「排序」输入,档位列表改为按 rank 排序,契约类型同步
- packages/shared:ProfileMembershipPlanRecord 去掉 sortOrder,充值弹层改为直接沿用后端的 rank 顺序
- docs:泥点三池与会员计费后端设计同步目录字段与后台能力说明

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 13:14:04 +08:00
k88936 e5de57f7f8 feat(会员): 管理接口校验调用方身份、写入侧拦倒挂目录、会员订单冻结结算快照
- profile.rs:10 个配置管理 procedure(任务/钱包/充值商品/会员档位/升级报价)补 require_editor_generation_runtime_service_identity,只允许 api-server 服务身份调用
- catalog.rs:新增 validate_runtime_profile_membership_plan_row_against_catalog,写入侧校验 rank 与月价/年价/每期泥点严格递增并拒绝倒挂
- errors.rs:新增 RuntimeProfileFieldError::InvalidMembershipPlanOrder 及中文文案
- lib.rs:导出 validate_runtime_profile_membership_plan_row_against_catalog
- catalog.rs:新增 4 个单测覆盖种子目录、单调改价、倒挂价格/泥点与重复 rank
- profile.rs:会员订单建单时冻结档位/价格/补点快照到订单行,支付结算只认快照,历史 Pending 订单回退按目录重算
- profile.rs:新增 project_profile_membership_cycle_at 只读投射账期,建单金额不再写库刷新,与预览/结算口径一致
- profile.rs:支付结算不再因档位下架拒绝已受理订单,避免付款回调卡死
- profile.rs:新增 2 个单测覆盖订单快照写入读回与无快照回退

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 12:46:50 +08:00
k88936 484db6cb7b 补充会员与泥点前端改造技术设计文档
- 新增技术设计文档,记录拷问结论、现状核实、改动清单与验收判据
- docs/README.md 登记该技术设计

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 12:12:29 +08:00
k88936 6b4b248879 AGC 桌面壳接入会员升级报价与会员下单
- 新增 Tauri 命令 read_profile_membership_upgrade_quote 并注册到桌面端
- accountHost 新增会员升级报价调用
- useAccountWallet 与 AccountWallet 接通报价、会员下单与共享弹层新 props
- 补充 accountHost 报价调用测试

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 12:12:18 +08:00
k88936 f33d11b050 平台入口与图片编辑器接入会员购买与升级
- platformProfileClient 新增会员升级报价接口调用
- usePlatformProfileCenterController 增加报价状态与会员下单入口
- PlatformEntryActiveFlowShell 与 ImageCanvasEditorView 向共享弹层透传报价与会员下单回调
- 同步修正平台入口与图片编辑器顶栏受入口文案变化影响的测试断言

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 12:12:12 +08:00
k88936 9ba3aec026 新增会员与泥点共享弹层并改版钱包入口
- PlatformProfileRechargeModal 重写为「会员订阅 / 泥点充值」双 Tab,含三池概览、套餐卡、周期切换、会员状态、套餐对比表与确认订单页
- 新增 membershipCopy 收敛数量估算、推荐标签、模型权限与并发展示文案,价格与权益仍读后端目录
- 新增 membershipProduct 提供由档位与周期拼出的会员 productId,避免与组件混导出
- PlatformMudPointWalletEntry 入口改为「可用总额 + 行内月度/永久 + 会员与泥点」,使用详情与兑换码保留为次级入口
- 同步改写共享弹层测试,覆盖双 Tab、升级报价与确认页

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 12:12:05 +08:00
k88936 76fd96fa06 后台管理端呈现会员快照、用户会员状态与三池命名
- 新增 config/membershipDisplay.ts 收敛档位与账期展示并供三处复用
- 用户详情对话框新增会员区块,钱包月度池改名「月度泥点」
- 充值订单列表与退款弹窗渲染会员变更快照
- 通用表浏览器补 profile_membership_plan 标签
- 补齐管理端类型、用例与本地假数据

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:48:36 +08:00
k88936 7acae0d308 后台契约与接口透出会员变更快照与用户会员状态
- shared-contracts 新增 AdminMembershipOrderChangePayload 与 AdminProfileMembershipPayload
- AdminProfileWalletPayload.membership_limited_points 改名 monthly_points
- AdminRechargeOrderEntryPayload 增加 membership_change 快照字段
- AdminUserDetailResponse 增加 membership 字段
- admin_recharge 映射会员订单快照与用户会员中心投影

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:48:24 +08:00
k88936 ff1b18c784 更新泥点三池与会员计费后台支撑文档
- 设计文档 §5.6 补充用户详情会员状态、月度泥点命名与表浏览器标签
- 设计文档 §10.2 前后端清单补登订单会员快照与用户会员状态可视化
- 决策记录登记 2026-10-03 后台会员计费运维面补全决策

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:48:18 +08:00
k88936 6d04f88f41 让充值商品默认档迁移识别旧迁移遗留的行
resolve_default_point_product_migration 同时识别停用的「首充双倍」行(赠送为 0 或等于面额)与在售的「首充加赠」行
更新迁移单测:disabled_seed 按旧迁移后的真实状态构造,并补充「首充加赠」用例

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:37 +08:00
k88936 92917f57c9 升级报价遇到目录倒挂时改为报错
quote_runtime_profile_membership_upgrade 用 checked_sub 替换 saturating_sub,价格或每期泥点倒挂时返回 InvalidQuoteInput
新增 inverted_catalog_price_and_points_are_rejected 覆盖原本会算成 0 元升级的场景

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:34 +08:00
k88936 119eb7c8b3 收紧后台会员档位与充值商品的校验和报错文案
可购买档位新增 period_points == 0 拒绝;不可购买档位固定使用目录种子的并发上限与模型权限
InvalidRechargeProductTier 拆为 InvalidRechargeProductKind 与 InvalidRechargeProductFields,报错不再误导运营

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:30 +08:00
k88936 ac5a03bf71 同步钱包 store 单测的键列表
walletStore.test.ts 去掉已删除的 applyLegacyWalletBalanceSnapshot 断言
使「mudPointBalance 为权威余额」用例与当前 store 实现保持一致

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:23 +08:00
k88936 40e4e6e384 补齐泥点余额视图与时间格式化的兜底
resolveProfileMudPointBalanceView 为 dailyFreeResetPoints 补 ?? 0,避免界面显示 NaN
formatBeijingDateTime 改用 hourCycle: 'h23',保证午夜稳定输出 00:00 而非 24:00

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:21 +08:00
k88936 5fabe6f2f7 充值商品列表只展示泥点商品
refreshProducts 过滤 response.entries,仅保留 kind === 'points'
避免历史会员商品行被渲染成 0 + 0 泥点,且保存时必然被后端拒绝

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:20 +08:00
k88936 848f0b54c8 修正后台会员档位表单的价格下限与缺档兜底
月价 / 年价输入框改为 min={isPurchasable ? 1 : 0},normal 档(0 价)不再被浏览器原生校验拦住
下拉选到目录中不存在的档位时清空表单并置空 rankLabel,避免提交上一档的陈旧值

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:13 +08:00
k88936 d49c527351 后台退出与登录时重置会员档位保存结果
AdminApp.tsx 的 clearSession 与 handleLogin 中补上 setMembershipPlanResult(null)
与其余三个结果状态保持一致,避免换管理员登录后展示上一会话的「最近保存」面板

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:12 +08:00
k88936 f631a2f06b 清理失效的 generated TS 覆盖配置
删除 .prettierrc.json 中指向 packages/shared/src/contracts/generated/**/*.ts 的 overrides
该目录已加入 .prettierignore,覆盖项不再生效,只会误导维护者

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-03 11:15:11 +08:00
k88936 06eb4e668c 修复(计费): 升级报价总期数改由周期类型推导
- 删除 RuntimeProfileMembershipUpgradeQuoteInput.cycle_count 入参,改由 target.cycle_kind.cycle_count() 推导(月付 1 / 年付 12),杜绝入参期数与周期类型不一致导致按错误期数计费
- 报价数值自检的期号上界改为相对推导出的总期数判断
- spacetime-module 构造报价入参时不再传 cycle_count
- 同步升级报价单测:年付 12 期、当前第 3 期 → 剩余完整月数 9,金额与测试夹具一并修正
- 同步设计文档 §3 入参与自检说明、§5.3 年付示例(remainingFullMonths 9 / amountCents 158334)

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:26:48 +08:00
k88936 bc3d8dc7da 注释(计费): 记录会员目录重建暂不缓存的原因
runtime_profile_membership_plan_catalog 加 TODO,说明每次重建只有 5 行、开销可忽略

按作者意见标记 wont fix,暂不改 LazyLock / &'static 缓存

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:06:07 +08:00
k88936 51c5784c46 文档(计费): 同步会员档位 rank 可失败返回说明
ADR §3 更新 runtime_profile_membership_plan_rank 签名为 Option<u8>

说明目录缺行时返回 None,不再用 unwrap_or(0) 伪装成 Normal

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:06:01 +08:00
k88936 047e6d72e4 重构(计费): 会员档位 rank 解析改为可失败返回
runtime_profile_membership_plan_rank 返回 Option<u8>,目录缺行时返回 None

去掉 unwrap_or(0),不再把目录缺失伪装成 Normal 而误报 NotUpgrade

plan_rank_follows_catalog_order 测试断言同步改为 Some(..)

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 20:05:51 +08:00
k88936 3eaae417ba 文档(计费): 补充升级报价数值入参自检说明
- 在领域数据结构 §3 记录 quote_runtime_profile_membership_upgrade 的防御式自检与 invalid_quote_input 拒绝

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:58:39 +08:00
k88936 83dbd0cc77 修复(计费): 升级报价拒绝越界数值入参
- 新增 RuntimeProfileMembershipUpgradeRejection::InvalidQuoteInput 及 wire token

- 报价前校验期号范围与账期窗口,避免 saturating_sub 静默夹取

- 新增 invalid_numeric_input_is_rejected 回归测试

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:57:04 +08:00
k88936 f09701f6d4 重构(计费): module-runtime 去掉通配 re-export 改为策展导出
- lib.rs 移除 pub use civil_calendar::*,公历基元只保留 civil_calendar:: 命名空间

- lib.rs 移除 pub use membership::*,改为只重导出对外的会员契约符号

- 未改动 spacetime-module / spacetime-client / api-server,现有引用保持可用

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:56:54 +08:00
k88936 8e1471d7af 测试(计费): 固化会员目录价格与泥点随 rank 递增的不变量
在 catalog 文档写明升级补差依赖的单调性不变量,并新增回归测试断言 rank 越高月价、年价、每期泥点严格递增

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:23:36 +08:00
k88936 58a79a2e4e 修复(计费): 北京本地时间换算校验当日时刻范围
beijing_local_micros 增加 time_of_day_micros 越界即返回 0 的校验,避免越界时刻被解释成另一天

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:22:36 +08:00
k88936 5ab6f161d0 文档(计费): 修正北京本地时间换算的返回值说明
beijing_local_micros 文档由「本地日期不存在返回原值」改为「返回 0」,与实际实现一致

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:13:31 +08:00
k88936 f810064657 文档(计费): 澄清档位排序以目录 rank 为准
RuntimeProfileMembershipPlan 文档改为说明排序由目录 rank 决定、枚举不实现 Ord,避免误以为变体顺序是排序契约

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:13:10 +08:00
k88936 8b8213f0c8 修复(计费): 公历反算避免 i64 溢出
civil_from_days 用 saturating_add 计算日序号偏移,消除 date_key 接近 i64::MAX 时的加法溢出

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:12:34 +08:00
k88936 603ecb0887 修复(计费): 星期换算避免 i64 溢出
weekday_from_date_key 先按 7 取模再加偏移,消除 date_key 接近 i64::MAX 时的中间加法溢出

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:11:59 +08:00
k88936 5bb98fd8fc chore(契约): 生成产物不进 prettier,恢复逐字节一致
- .prettierignore 排除 packages/shared/src/contracts/generated/:prettier 重排会让 check:generated-bindings 的「重新生成逐字节比对」永远失败
- 按 ts-rs 实际输出重新生成 ProfileMudPointBalanceResponse.ts(含字段文档注释)

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:05:57 +08:00
k88936 a7cde25b28 docs(计费): 设计文档与决策记录更新为已落地
- 【技术设计】泥点三池与会员计费后端设计:余额投影改为扁平三池标量、报价请求不收周期、会员订单 product_id 编码档位与周期、充值中心改 membershipPlans,新增后台接口与 ts-rs 契约生成小节
- §10.2 实施状态由「待落地清单」改写为「已落地 + 明确不做」,注明永久余数仍是推导实现
- docs/README 索引标注两份文档已落地;decision-log 追加 2026-10-02 状态与实现期补充决断

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:03:55 +08:00
k88936 de082ad81a feat(后台): 新增会员档位页并收敛充值商品页
- 充值商品页改为纯泥点商品:去掉会员档位与 membership_* 字段,固定 kind=points,首充赠送默认 0
- 新增会员档位页:按档位枚举改月价 / 年价 / 每期泥点 / 模型权限 / 并发上限 / 可购买 / 排序,rank 只读
- adminApiTypes 用档位枚举替换旧 tier 类型并补会员档位请求响应类型,客户端补 listProfileMembershipPlans / upsertProfileMembershipPlan
- 注册 #membership-plans 路由与侧边栏图标

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:03:40 +08:00
k88936 144068187c 重构(平台入口): 平台侧与 AGC 壳改用三池余额,退役 legacy 总额写入通道
- 平台入口与钱包 store 不再从充值中心响应读 walletBalance,合计改为按三池派生
- AGC 账户钱包同步:只透传 mudPointBalance,删掉 RechargeContent 的 walletBalance 排除项
- 删除已无生产调用方的 applyLegacyWalletBalanceSnapshot 与对应测试;明细读取失败不再伪造「只有总额」的中间态
- 图片编辑器与平台入口测试 fixture 改为三池形状,钱包面板断言改用「永久泥点 / 月度泥点」

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:03:30 +08:00
k88936 3b9d645042 重构(钱包): 共享组件与钱包 store 改用三池余额
- createProfileWalletStore 的余额状态改为三池视图,去掉「响应只有 walletBalance 时兜底」的旧分支,缺少 mudPointBalance 一律算读取失败
- 泥点明细面板并列展示永久泥点 / 月度泥点 / 每日免费泥点,月度行带北京时间刷新时刻;「不限时泥点」标签改为「永久泥点」
- 充值弹层当前余额改用三池合计,不再读 walletBalance
- 三池与首充赠送相关的 store、明细面板、充值弹层测试同步更新

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:00:23 +08:00
k88936 abc92d230b chore(契约): 三池余额 DTO 交给 ts-rs 生成,同步 SpacetimeDB 绑定
- 给 ProfileMudPointBalanceResponse 加 ts-bindings 特性下的 ts_rs::TS 导出,u64 标 ts(type = "number") 避免前端分叉成 bigint
- 新增 packages/shared/src/contracts/generated/ProfileMudPointBalanceResponse.ts,runtime.ts 改为 re-export 不再手写第二份字段
- 新增 packages/shared/src/utils/mudPoints.ts:派生展示用合计与北京时间月度刷新文案
- 同步 spacetime-client 生成绑定:升级报价改名为 snapshot,与 module 侧改动对齐

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 19:00:08 +08:00
k88936 c772600d59 feat(会员): 新增补差升级报价接口、后台档位读写与订单权益快照
新增 POST /api/profile/membership/upgrade-quote:只读报价,下单时后端用同一纯函数重算

新增后台 /admin/api/profile/membership-plans 的读取与按档位改价改权益接口

订单与管理端契约补上会员权益变更快照(变更前后档位、周期、补点、有效期与价格拆分)

报价结果统一走「模块侧快照 + application 记录侧投影」两段式,与既有 DTO 约定一致

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 17:36:26 +08:00
k88936 703a24b682 重构(计费): 余额接口并列暴露三池并去掉会员 tier 字段
- 余额响应改为每日免费 / 月度 / 永久三池并列,不再暴露总额与会员限时泥点
- 会员响应与充值中心以 plan 取代 tier,充值中心改为输出会员目录
- 微信虚拟支付按目录档位校验会员商品,不再依赖会员商品配置行
- 同步 shared-contracts 测试夹具到新的三池与 plan 口径

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 16:59:49 +08:00
k88936 e98564e13c 重构(会员): 会员目录与自然月账期落到数据库与领域层
- 领域层新增会员档位枚举、自然月账期、目录快照与补差报价入参,删除旧 tier 相关函数
- profile_membership 表以 plan 与自然月期数取代 tier 与固定 30 天周期
- profile_recharge_order 末位追加会员权益变更快照,供人工复核退款
- profile_membership_plan 目录表成为价格与权益的唯一真相源,新增后台读写接口
- 充点商品收敛为六档且取消首充赠送,旧播种行按新规则迁移
- 充值中心改为输出会员目录,不再输出会员商品行与权益矩阵
- 重新生成 SpacetimeDB 绑定并同步客户端映射与 facade

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 16:59:34 +08:00
k88936 03073564b1 重构(会员): 会员表列改为 plan 与自然月账期,订单落权益变更快照
profile_membership 删除 tier / cycle_period_days 与四个会员商品权益列,末位追加 plan、cycle_index、cycle_count、cycle_kind

profile_recharge_product_config 删除 tier 与四个会员权益列,只保留充点商品;会员商品不再落该表

profile_recharge_order 末位追加会员变更快照列(变更类型、前后档位、前后周期、补点数、前后到期日 / 刷新日、价格快照)

会员周期刷新改为按北京时间自然月从原始锚点重算,到期清月度余额、永久泥点不受影响

会员购买与升级改走目录表实时价格:有效期内同周期升档按补差报价,补点向下取整、金额向上到分

会员账本幂等锚改为订单维度(membership-period-grant / membership-upgrade-grant 加订单 ID)

充点商品迁移规则改为六档无首充赠送,旧首充赠送行与停用的 ¥128 / ¥328 行一并归一

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 15:54:28 +08:00
k88936 01c7cc8b66 重构(会员): 档位身份改为 plan 枚举,价格以目录表为真相源
- 领域层清理:删除 RuntimeProfileMembershipTier 及旧的 tier 别名体系
- 会员目录行改名 RuntimeProfileMembershipPlanRecord,快照新增 enabled 字段
- 补差升级报价入参改为「目录表解析出的当前/目标套餐快照」
- 新增会员商品 product_id 编解码(档位 + 周期,严格解析拒绝未知 token)
- 报价与允许操作矩阵改为读取快照 rank / enabled,不再走编译期常量

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 15:38:52 +08:00
k88936 71c778ccee feat(会员): 会员档位目录随充值商品配置播种
Project CI / AI game creator shell Rust crates (pull_request) Successful in 1m23s
Project CI / Backend tests (pull_request) Failing after 28s
Project CI / AI game creator shell Rust smoke (pull_request) Successful in 2m56s
Project CI / Frontend tests (pull_request) Successful in 2m59s
Project CI / Repository checks (pull_request) Failing after 15s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m0s
Project CI / Native shell tests (pull_request) Successful in 7m6s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 11m24s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 13m27s
- 新增 ensure_default_profile_membership_plan,表为空时按会员目录种子整表播种。
- 播种入口挂在 ensure_default_profile_recharge_product_config,表非空时保留后台改价。
- 设计文档 §10 改为「已确认输入 + 实施状态」,记录三项拍板结论。
- 设计文档补充实施约束:module-runtime 与 spacetime-module 相互依赖,领域层清退必须与 schema 变更同批提交。
- 设计文档列出待落地清单(会员遗留清退、三池 DTO、报价接口、充点 6 档、前端同步)。
2026-10-02 15:02:15 +08:00
k88936 1790ddff6a Revert "重构:清退会员遗留档位与商品权益字段"
This reverts commit 103f3b548a.
2026-10-02 15:00:04 +08:00
k88936 103f3b548a 重构:清退会员遗留档位与商品权益字段
- 删除 RuntimeProfileMembershipTier 枚举与会员权益快照/记录。
- 会员快照与记录的 tier 改为 plan 枚举,新增 cycle_index / cycle_count / cycle_kind。
- 充点商品快照/记录与配置快照/记录移除 tier 及四个 membership_* 字段。
- 充值中心快照/记录改用 membership_plans,取代 membership_products 与 benefits。
- 充点商品重播种为六档并取消首充赠送,删除会员商品构造与档位查表 helper。
- 后台充值商品 upsert 只接受泥点商品,会员商品改由会员计划目录维护。
2026-10-02 14:55:31 +08:00
k88936 61d4db4610 feat(会员): 新增会员计划目录表 profile_membership_plan
- spacetime-module:新增 profile_membership_plan 表,主键为档位枚举 RuntimeProfileMembershipPlan,一行一档承载月价 / 年价 / 每期额度 / 模型权限 / 并发上限
- migration.rs:表目录登记 profile_membership_plan
- spacetime-client:重新生成绑定,新增目录表与档位 / 模型权限枚举
- docs:后端数据契约新增 profile_membership_plan 说明,并把表定义源码路径修正为 runtime/active/profile.rs

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 14:49:43 +08:00
k88936 f6fbd2a392 chore(会员): 删除未被引用的旧表定义副本
- spacetime-module:删除 src/runtime/profile.rs,它未被 src/runtime.rs 挂载(真正生效的是 runtime/active/profile.rs)
- 避免设计文档与实现指向失效文件,也避免后续删列改动误落两份

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 14:36:16 +08:00
k88936 26e1ea9e27 feat(泥点): 账本来源追加会员升级补点
- module-runtime:RuntimeProfileWalletLedgerSourceType 末尾追加 MembershipUpgradeGrant,保持枚举只追加
- shared-contracts:新增 PROFILE_WALLET_LEDGER_SOURCE_TYPE_MEMBERSHIP_UPGRADE_GRANT 常量
- api-server:后台枚举索引映射与来源格式化支持新来源,并补单测断言
- spacetime-client:手写 mapper 与生成绑定同步新增变体
- packages/shared 与主站前端:钱包流水来源标签新增「会员升级补点」

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 14:33:16 +08:00
k88936 ba22d178d3 重构:会员领域模块归并到 membership 目录
- 把 membership_catalog/cycle/limits/upgrade 四个文件移入 src/membership/ 并去掉公共前缀
- 新增 membership/mod.rs 统一声明子模块并按依赖顺序导出
- lib.rs 改为 pub mod membership,删除旧的四个模块声明
- membership/upgrade.rs 内部引用改为同级模块路径
- 无行为变化,cargo test -p module-runtime 全通过

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-02 14:21:01 +08:00