• erio's avatar
    fix(billing): reject rate_multiplier <= 0 on save; clamp negatives to 0 in compute · df57d277
    erio authored
    分组倍率和用户专属倍率在保存时没有校验,0 会触发计费层的 `<=0 → 1.0`
    防御条款,结果订阅/余额分组按标准价扣费;完全是沉默地绕过了业务规则。
    
    - 保存校验(admin_service):CreateGroup / UpdateGroup / BatchSetGroupRateMultipliers /
      UpdateUser.SyncUserGroupRates 全部要求 > 0
    - 计算层(billing_service):三处 `<=0 → 1.0` 改为 `<0 → 0`;负数按 0 结算,
      避免配置异常被静默按 1x 收费
    - 前端:分组倍率 / 用户专属倍率输入 min 统一到 0.001
    - 删除未使用的 IsFreeSubscription 方法
    
    测试:新增 billing_service_rate_multiplier_test.go 端到端验证;更新原有锁定
    旧 `<=0 → 1.0` 行为的测试。
    df57d277
GroupRateMultipliersModal.vue 18.4 KB