shanshanzhong147
7236ca4cf2
修复( #128 ): 按规则类型决定促销资格,让 InactiveUser/Campaign 对老用户生效
...
Build docker and publish / build (20.15.1) (push) Has been cancelled
Build docker and publish / build (20.15.1) (pull_request) Has been cancelled
此前 calculatePurchasePrice 把 allowPromo 绑死在 orderType == 1,导致只要用户
有任何过往付费订阅(含已过期),就会被 paidSubscriptionQuery 路由为续费
(orderType=2),跳过所有促销评估。后果:
- InactiveUser 召回促销永远无法触发(其目标人群恰好就是有过期订阅的用户)
- Campaign 全员活动对老用户 / 升级加购场景完全失效
- 套餐列表(loadSubscribePromoMap)直接调 EvaluatePromo 不感知 orderType,
可能显示促销价但下单时却拿到原价
修复方式:把 isFirstPurchase 下放给 EvaluatePromo,由规则类型决定 gating:
- NewUser 要求 isFirstPurchase=true(保留首购语义)
- InactiveUser 由规则自身的"上次订阅过期 N 月以上"条件判定
- Campaign 时间窗内对任意用户生效
新增 common.HasPaidSubscription 助手,套餐列表与下单走同一份 isFirstPurchase
判定,确保展示价与实际下单价口径一致。
测试:补充 EvaluatePromo / calculatePurchasePrice 的 NewUser 屏蔽 + Campaign
放开用例;更新 loadSubscribePromoMap 测试覆盖新增 HasPaidSubscription 查询。
注:renewalLogic.go 仍未接入促销(属于方向 B 的彻底统一,本次未涵盖)。
2026-05-31 19:00:30 -07:00
shanshanzhong147
c2d1b5a0d8
修复( #130 ): 统一家庭成员促销资格口径
...
Build docker and publish / build (20.15.1) (push) Failing after 22m15s
Build docker and publish / build (20.15.1) (pull_request) Failing after 18m6s
Co-authored-by: multica-agent <github@multica.ai >
2026-05-30 01:58:15 -07:00
shanshanzhong147
3644e9ce3f
修复( #128 ): 统一促销价格资格口径
...
Build docker and publish / build (20.15.1) (push) Failing after 18m40s
Build docker and publish / build (20.15.1) (pull_request) Failing after 19m24s
Co-authored-by: multica-agent <github@multica.ai >
2026-05-29 22:42:04 -07:00
shanshanzhong147
b5e50d1ee5
修复( #75 ): 按数量精确匹配套餐列表促销
...
Build docker and publish / build (20.15.1) (push) Failing after 9m2s
Build docker and publish / build (20.15.1) (pull_request) Successful in 7m58s
- loadSubscribePromoMap 返回 map[subscribeID]map[quantity]*SubscribePromo 二级映射
- 候选查询按 subscribe_id、quantity、priority DESC 排序,一次取出所有 quantity 档位
- 下单路径 QueryEligibleRules 将 quantity 条件移至 JOIN,精确匹配
- 永久订阅(expire_time=0)用 CASE WHEN 排序兜底,不再误判为回归促销
- 新增 promoEligibility、model、subscribe promo 单元测试
Co-authored-by: multica-agent <github@multica.ai >
2026-05-27 06:22:49 -07:00
shanshanzhong147
02b41e7a2c
修复( #85 ): 促销系统 quantity 设计修正补丁(跨任务统一修复)
...
Build docker and publish / build (20.15.1) (push) Failing after 8m50s
Build docker and publish / build (20.15.1) (pull_request) Successful in 8m19s
- subscribe_promo 表加 quantity 字段,BIGINT NOT NULL DEFAULT 1
- EvaluatePromo 加 quantity 参数,按 subscribeID + quantity 精确匹配
- Promo 从 Subscribe 顶层移到 SubscribeDiscount
- 查询加 quantity,返回 map[subscribeID][quantity] 二级映射
- recordPromoUsage 错误向上传播,不再静默吞掉
- preCreate 和 purchase 的 allowPromo 判定统一为 orderType==1
- 迁移脚本增加幂等处理(guarded DROP/ADD/MODIFY)
Co-authored-by: multica-agent <github@multica.ai >
2026-05-27 05:57:21 -07:00
shanshanzhong147
d12c340743
新功能( #77 ): 套餐列表 API 返回规格级促销信息
...
Build docker and publish / build (20.15.1) (push) Failing after 8m23s
Build docker and publish / build (20.15.1) (pull_request) Successful in 7m54s
将 promo 字段从 Subscribe 顶层移至 SubscribeDiscount(discount[] 项内),
促销查询按 subscribe_id + quantity 维度写入,每个规格独立命中最高优先级规则。
Co-authored-by: multica-agent <github@multica.ai >
2026-05-27 02:19:58 -07:00
shanshanzhong147
48e507783e
新功能( #77 ): 套餐列表返回促销信息
...
Build docker and publish / build (20.15.1) (push) Failing after 8m34s
Build docker and publish / build (20.15.1) (pull_request) Successful in 8m4s
- 新增 SubscribePromo 响应结构,套餐列表每项追加 promo 字段
- 新增 promo.go 促销候选规则查询与资格评估逻辑
- 重构 authMiddleware 提取 authenticateRequest,新增 OptionalAuthMiddleware
- /v1/public/subscribe/list 改为可选鉴权,未登录仅展示 campaign 类型促销
- /node/list、/group/list 保持强制鉴权不变
- 每个规格只返回最高优先级命中的规则,promo_price 为单价,expires_at 为秒级时间戳
- 新增单测覆盖 campaign/new_user 命中、活动窗口判定等场景
Co-authored-by: multica-agent <github@multica.ai >
2026-05-26 22:40:58 -07:00
shanshanzhong147
1dbc3a81e9
fix: 老版本客户端去掉每个套餐 discount 最后一个,而非整个套餐
2026-03-29 03:19:15 -07:00
shanshanzhong147
3b4e882965
feat: 根据 X-App-Id 判断是否裁剪套餐列表,老版客户端去掉最后一个
Build docker and publish / build (20.15.1) (push) Successful in 7m37s
2026-03-28 23:21:00 -07:00
shanshanzhong147
26c9ff2f0f
x
Build docker and publish / build (20.15.1) (push) Successful in 8m31s
2026-03-28 22:57:19 -07:00
shanshanzhong147
aaacb47dad
x
Build docker and publish / build (20.15.1) (push) Failing after 7m51s
2026-03-28 22:44:22 -07:00
shanshanzhong147
6f6943f295
api-header
Build docker and publish / build (20.15.1) (push) Successful in 8m23s
2026-03-28 10:05:32 -07:00
shanshanzhong147
f703b5089a
分组概念
Build docker and publish / build (20.15.1) (push) Successful in 7m58s
2026-03-19 03:21:47 -07:00
shanshanzhong147
e5e9f93f68
Merge remote-tracking branch 'origin/master' into internal
2026-03-19 01:55:01 -07:00
EUForest
06a2425474
feat(subscribe): add traffic limit rules and user traffic stats
...
- Add subscribe traffic_limit schema and migration\n- Support traffic_limit in admin create/update and list/details\n- Apply traffic_limit when building server user list speed limits\n- Add public user traffic stats API
2026-03-14 12:41:52 +08:00
EUForest
17163486f6
fix(subscribe): fix user subscription node retrieval logic to support directly assigned nodes
2026-03-10 18:29:19 +08:00
EUForest
39310d5b9a
Features:
...
- Node group CRUD operations with traffic-based filtering
- Three grouping modes: average distribution, subscription-based, and traffic-based
- Automatic and manual group recalculation with history tracking
- Group assignment preview before applying changes
- User subscription group locking to prevent automatic reassignment
- Subscribe-to-group mapping configuration
- Group calculation history and detailed reports
- System configuration for group management (enabled/mode/auto_create)
Database:
- Add node_group table for group definitions
- Add group_history and group_history_detail tables for tracking
- Add node_group_ids (JSON) to nodes and subscribe tables
- Add node_group_id and group_locked fields to user_subscribe table
- Add migration files for schema changes
2026-03-08 23:22:38 +08:00
shanshanzhong147
4d913c1728
修复缓存
Build docker and publish / build (20.15.1) (push) Successful in 7m26s
2026-03-06 21:58:29 -08:00
shanshanzhong147
7308aa9191
无订阅 支付后出现两个订阅
Build docker and publish / build (20.15.1) (push) Failing after 7m37s
2026-03-05 21:53:36 -08:00
shanshanzhong147
4349a7ea2f
家庭组 权益修改
Build docker and publish / build (20.15.1) (push) Successful in 8m16s
2026-03-04 22:02:42 -08:00
EUForest
39db154e53
fix bug: Flag free trial
2025-12-17 22:09:46 +08:00
EUForest
902608b2e0
Add: Get expired subscription
2025-11-08 17:06:30 +08:00
EUForest
52ce054b35
Add: Server location latitude and longitude
2025-11-04 14:53:43 +08:00
EUForest
b099331302
add: Add protocol configuration in the return node
2025-10-22 19:54:56 +08:00
EUForest
640b8c0805
add: query user subscribe node list
2025-10-13 19:16:36 +08:00
Chang lue Tsen
0636a4bddf
feat(subscription): implement FilterList method for subscription queries and update related logic
2025-09-04 10:20:35 -04:00
Chang lue Tsen
f632ea2c89
feat(subscribe): add Language field to subscription models and update query logic
2025-09-03 15:44:04 -04:00
Chang lue Tsen
8996a62b54
refactor(api): remove deprecated application-related endpoints and types
2025-08-17 12:14:55 -04:00
Chang lue Tsen
34c09c4618
refactor: update import paths from ppanel-server to server
2025-04-25 15:09:31 +09:00
Chang lue Tsen
8addcc584b
init: 1.0.0
2025-04-25 12:08:29 +09:00