242 lines
6.8 KiB
Markdown
242 lines
6.8 KiB
Markdown
# 功能同步计划:私有版 → 开源版
|
||
|
||
源目录:`/Users/Apple/vpn/ppanel-server`(私有版)
|
||
目标目录:`/Users/Apple/code_vpn/vpn/ppanel-server`(开源版)
|
||
模块名相同:`github.com/perfect-panel/server`
|
||
|
||
---
|
||
|
||
## 批次 A:新增独立包(直接复制)
|
||
|
||
### A1. pkg/iap(Apple IAP)
|
||
- 复制 `pkg/iap/` 全目录
|
||
|
||
### A2. pkg/kutt(短链接服务)
|
||
- 复制 `pkg/kutt/kutt.go`
|
||
|
||
### A3. pkg/loki(Grafana Loki)
|
||
- 复制 `pkg/loki/loki.go`
|
||
|
||
### A4. pkg/openinstall(渠道统计)
|
||
- 复制 `pkg/openinstall/openinstall.go`
|
||
|
||
### A5. internal/model/iap(IAP 数据模型)
|
||
- 复制 `internal/model/iap/` 全目录
|
||
|
||
### A6. internal/model/logmessage(错误日志模型)
|
||
- 复制 `internal/model/logmessage/` 全目录
|
||
|
||
---
|
||
|
||
## 批次 B:数据库迁移
|
||
|
||
### B1. 新增迁移文件(仅从私有版复制)
|
||
- `02120_log_message.up.sql` / `.down.sql`
|
||
- `02121_apple_iap_transactions.up.sql` / `.down.sql`
|
||
- `02122_add_user_last_login_time.up.sql` / `.down.sql`
|
||
- `02123_update_auth_method_config.up.sql` / `.down.sql`(auth_method MEDIUMTEXT)
|
||
|
||
### B2. 修改共有迁移文件
|
||
- `00002_init_basic_data.up.sql`:VerifyCodeExpireTime 默认值 300→900
|
||
- `02118_traffic_log_idx.up.sql`:添加幂等性检查
|
||
- `02119_node.up.sql`:@sql 变量名修正(已是私有版逻辑,保留)
|
||
|
||
---
|
||
|
||
## 批次 C:配置与基础设施
|
||
|
||
### C1. internal/config/config.go
|
||
- 添加:KuttConfig、LokiConfig、OpenInstallConfig、AppleIAPConfig 结构体
|
||
- 添加:FixedRate 浮点型汇率配置
|
||
|
||
### C2. internal/config/cacheKey.go
|
||
- 添加:`UserSessionsKeyPrefix = "auth:user_sessions:"`
|
||
|
||
### C3. pkg/conf/default.go
|
||
- 添加:reflect.Float64 case 处理
|
||
|
||
### C4. internal/svc/serviceContext.go
|
||
- 添加:Kutt、Loki、OpenInstall、IAPModel 字段
|
||
|
||
### C5. internal/svc/devce.go
|
||
- 修复 SQL Bug:`create_at` → `created_at`
|
||
|
||
### C6. pkg/orm/mysql.go
|
||
- 添加:SetConnMaxIdleTime(5min) + SetConnMaxLifetime(30min)
|
||
|
||
### C7. pkg/exchangeRate/exchangeRate.go
|
||
- 保持私有版的 exchangerate.host 实现
|
||
|
||
### C8. initialize/config.go & init.go
|
||
- 添加 Loki、OpenInstall 初始化逻辑
|
||
|
||
---
|
||
|
||
## 批次 D:数据模型
|
||
|
||
### D1. internal/model/user/user.go
|
||
- 添加:LastLoginTime 字段
|
||
|
||
### D2. internal/model/auth/auth.go
|
||
- config 字段 MEDIUMTEXT(Go 结构体 tag)
|
||
- 补全 4 种邮件模板初始化
|
||
|
||
### D3. internal/model/node/model.go
|
||
- 添加:CountNodesByIdsAndTags 方法(移除 fmt.Println 调试语句)
|
||
- 修复:ClearServerAllCache 同时清理 ServerConfig + ServerUserList
|
||
- 修复:cursor append bug(OSS版的 append(keys, keys...))
|
||
|
||
### D4. internal/model/payment/payment.go
|
||
- 添加:AppleIAPConfig 结构体
|
||
|
||
### D5. internal/model/user/subscribe.go
|
||
- 添加:includeExpired 参数支持(":all" cache key suffix)
|
||
|
||
---
|
||
|
||
## 批次 E:认证与登录逻辑
|
||
|
||
### E1. internal/logic/auth/userLoginLogic.go
|
||
- 添加:LastLoginTime 更新
|
||
- 添加:邮箱登录调试日志清理
|
||
|
||
### E2. internal/logic/auth/userRegisterLogic.go
|
||
- 添加:邮箱小写/trim 处理
|
||
- 添加:验证码过期时间使用配置值
|
||
|
||
### E3. 新增:internal/logic/auth/emailLoginLogic.go
|
||
- 从私有版复制邮箱直登逻辑
|
||
|
||
### E4. 新增:apis/auth/auth.api 邮箱登录路由
|
||
- 添加 emailLogin 接口定义
|
||
|
||
---
|
||
|
||
## 批次 F:用户功能逻辑
|
||
|
||
### F1. internal/logic/public/user/queryUserInfoLogic.go
|
||
- 添加:Kutt 短链接生成 + Redis 永久缓存
|
||
- 添加:share_link 字段返回
|
||
|
||
### F2. internal/logic/public/user/queryUserSubscribeLogic.go
|
||
- 添加:查询 Order 判断 IsGift(amount==0)
|
||
|
||
### F3. internal/handler/public/user/queryUserSubscribeHandler.go
|
||
- 添加:includeExpired query param 注入 context
|
||
|
||
### F4. internal/model/user/model.go
|
||
- 添加:FindActiveSubscribe / FindActiveSubscribesByUserIds
|
||
- 添加:BatchClearRelatedCache
|
||
- 添加:DeleteUserAuthMethodByIdentifier
|
||
|
||
---
|
||
|
||
## 批次 G:订单与支付
|
||
|
||
### G1. internal/logic/public/order/preCreateOrderLogic.go
|
||
- 修复:math.Round 金额计算
|
||
|
||
### G2. internal/logic/public/order/purchaseLogic.go
|
||
- 修复:math.Round
|
||
|
||
### G3. internal/logic/public/order/renewalLogic.go
|
||
- 修复:math.Round
|
||
|
||
### G4. internal/logic/public/portal/purchaseCheckoutLogic.go
|
||
- 添加:Apple IAP checkout case
|
||
- 添加:currency 从 DB 动态读取 + FixedRate fallback
|
||
- 修复:math.Round for alipay
|
||
|
||
### G5. internal/model/payment/model.go
|
||
- 添加:AppleIAP payment model 支持
|
||
|
||
### G6. pkg/payment/platform.go
|
||
- 添加:AppleIAP platform entry
|
||
|
||
---
|
||
|
||
## 批次 H:订阅与节点
|
||
|
||
### H1. internal/logic/public/portal/getSubscriptionLogic.go
|
||
- 添加:CountNodesByIdsAndTags 调用,返回 node_count
|
||
|
||
### H2. internal/logic/public/portal/purchaseLogic.go
|
||
- 添加:CloseOrderTimeMinutes 超时配置
|
||
|
||
### H3. internal/logic/subscribe/subscribeLogic.go
|
||
- 保持:PanDomain 模式返回当前 Host
|
||
|
||
---
|
||
|
||
## 批次 I:队列任务
|
||
|
||
### I1. queue/logic/order/activateOrderLogic.go
|
||
- 添加:findGiftSubscription 逻辑
|
||
- 添加:extendGiftSubscription 逻辑
|
||
- 添加:grantGiftDaysToBothParties(双向赠礼)
|
||
- 添加:no-retry for invalid status
|
||
|
||
### I2. queue/logic/email/sendEmailLogic.go
|
||
- 修改:主题中文化
|
||
- 修改:动态过期分钟数
|
||
- 修改:float64→int 类型转换
|
||
- 添加:Smart Fallback 模板逻辑(4种类型)
|
||
|
||
### I3. queue/logic/task/rateLogic.go
|
||
- 添加:FixedRate config 支持(跳过 API 调用)
|
||
|
||
---
|
||
|
||
## 批次 J:路由与类型
|
||
|
||
### J1. internal/handler/routes.go
|
||
- 添加:IAP Apple 路由
|
||
- 添加:email login 路由
|
||
- 添加:error log 路由
|
||
- 添加:contact 路由
|
||
|
||
### J2. internal/types/types.go
|
||
- 添加:Apple IAP 相关 Request/Response 类型
|
||
- 添加:BindEmailWithVerificationRequest/Response
|
||
- 添加:BindInviteCodeRequest
|
||
- 添加:ProductIds in checkout
|
||
|
||
### J3. internal/types/subscribe.go
|
||
- 保持私有版(移除 Type/Params 开源版新增字段——已在批次 A 处理)
|
||
|
||
---
|
||
|
||
## 批次 K:邮件系统
|
||
|
||
### K1. pkg/email/template.go
|
||
- 添加:Maintenance、TrafficExceed、Verify 3 种邮件模板
|
||
|
||
---
|
||
|
||
## 批次 L:管理后台
|
||
|
||
### L1. internal/logic/admin/user/getUserListLogic.go
|
||
- 添加:MemberStatus + LastLoginTime 展示
|
||
- 添加:批量获取 active subscriptions
|
||
|
||
### L2. internal/logic/admin/user/updateUserBasicInfoLogic.go
|
||
- 添加:Remark + MemberStatus 更新
|
||
- 添加:单事务包裹所有修改
|
||
|
||
---
|
||
|
||
## 执行顺序
|
||
|
||
1. A(新包) → B(迁移) → C(配置) → D(模型)
|
||
2. E(认证) → F(用户) → G(订单) → H(订阅)
|
||
3. I(队列) → J(路由) → K(邮件) → L(管理后台)
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
- **排除**:App版本管理、设备绑定相关逻辑(ZSet Session、DeviceId in token)
|
||
- **调试日志清理**:不带 fmt.Println 调试语句
|
||
- **模块名相同**:import 路径无需修改
|
||
- **开源版新功能保留**:软删除、注册 IP 限流、兑换码系统、GeoIP 等开源版独有功能不回退
|