fix: 注册 user-rules 和 shensheshou 路由,修复规则配置保存失败

- 将 /api/db/user-rules 的 GET/POST/PUT/DELETE 路由注册到 db 组
- 将 /api/admin/shensheshou/* 的 4 个路由注册到 admin 组
- 包含上次对话的头像 URL 修复(normalizeImageUrl 全栈)

Made-with: Cursor
This commit is contained in:
卡若
2026-03-15 19:31:07 +08:00
parent 708547d0dd
commit 64db4927ea
116 changed files with 1969 additions and 435 deletions

View File

@@ -137,7 +137,7 @@ func MiniprogramLogin(c *gin.Context) {
"id": user.ID,
"openId": getStringValue(user.OpenID),
"nickname": getStringValue(user.Nickname),
"avatar": getStringValue(user.Avatar),
"avatar": getUrlValue(user.Avatar),
"phone": getStringValue(user.Phone),
"wechatId": getStringValue(user.WechatID),
"referralCode": getStringValue(user.ReferralCode),
@@ -215,7 +215,7 @@ func MiniprogramDevLoginAs(c *gin.Context) {
"id": user.ID,
"openId": openID,
"nickname": getStringValue(user.Nickname),
"avatar": getStringValue(user.Avatar),
"avatar": getUrlValue(user.Avatar),
"phone": getStringValue(user.Phone),
"wechatId": getStringValue(user.WechatID),
"referralCode": getStringValue(user.ReferralCode),
@@ -251,6 +251,18 @@ func getStringValue(ptr *string) string {
return *ptr
}
// getUrlValue 取字符串指针值并修复缺少冒号的 URL"https//..." → "https://..."
func getUrlValue(ptr *string) string {
s := getStringValue(ptr)
if strings.HasPrefix(s, "https//") {
return "https://" + s[7:]
}
if strings.HasPrefix(s, "http//") {
return "http://" + s[6:]
}
return s
}
func getBoolValue(ptr *bool) bool {
if ptr == nil {
return false
@@ -730,6 +742,9 @@ func MiniprogramPhone(c *gin.Context) {
trackID := fmt.Sprintf("track_%d", time.Now().UnixNano()%100000000)
db.Create(&model.UserTrack{ID: trackID, UserID: req.UserID, Action: "bind_phone"})
fmt.Printf("[MiniprogramPhone] 手机号已绑定到用户: %s\n", req.UserID)
// 记录绑定手机行为
bindTrackID := fmt.Sprintf("track_%d", time.Now().UnixNano()%100000000)
database.DB().Create(&model.UserTrack{ID: bindTrackID, UserID: req.UserID, Action: "bind_phone"})
// 绑定手机号后,异步调用神射手自动完善标签
AdminShensheShouAutoTag(req.UserID, phoneNumber)
}
@@ -892,7 +907,7 @@ func MiniprogramUsers(c *gin.Context) {
item := gin.H{
"id": user.ID,
"nickname": getStringValue(user.Nickname),
"avatar": getStringValue(user.Avatar),
"avatar": getUrlValue(user.Avatar),
"phone": getStringValue(user.Phone),
"wechatId": getStringValue(user.WechatID),
"vipName": getStringValue(user.VipName),
@@ -931,7 +946,7 @@ func MiniprogramUsers(c *gin.Context) {
list = append(list, gin.H{
"id": u.ID,
"nickname": getStringValue(u.Nickname),
"avatar": getStringValue(u.Avatar),
"avatar": getUrlValue(u.Avatar),
"is_vip": uvip,
})
}