fix: 云端函数默认注入当前登录用户信息

- 当请求参数未指定 user_id 时,使用 token 中的用户 ID
- 确保 user、subscription、devices 等变量始终有值
This commit is contained in:
2026-05-07 13:13:18 +08:00
parent e019f6a55c
commit 551eff2f60
+42 -39
View File
@@ -173,49 +173,52 @@ func handleExecuteDynamicCode(c *gin.Context) {
userVariables := map[string]interface{}{} userVariables := map[string]interface{}{}
devices := []map[string]interface{}{} devices := []map[string]interface{}{}
targetUserID := claims.UserID
if req.UserID != nil { if req.UserID != nil {
var user model.AppUser targetUserID = *req.UserID
if err := database.DB.Where("id = ? AND application_id = ?", *req.UserID, app.ID).First(&user).Error; err == nil { }
userData = map[string]interface{}{
"id": user.ID,
"username": user.Username,
"email": user.Email,
"status": user.Status,
"device_id": user.DeviceID,
"avatar": user.Avatar,
"created_at": user.CreatedAt,
"last_login_at": user.LastLoginAt,
}
subscription = map[string]interface{}{ var user model.AppUser
"balance": user.Balance, if err := database.DB.Where("id = ? AND application_id = ?", targetUserID, app.ID).First(&user).Error; err == nil {
"is_trial_user": user.IsTrialUser, userData = map[string]interface{}{
"trial_start_at": user.TrialStartAt, "id": user.ID,
"trial_end_at": user.TrialEndAt, "username": user.Username,
"expiry_at": user.ExpiryAt, "email": user.Email,
"is_expired": user.ExpiryAt != nil && user.ExpiryAt.Before(time.Now()), "status": user.Status,
"is_lifetime": user.Balance == -1, "device_id": user.DeviceID,
"days_remaining": calculateDaysRemaining(user.ExpiryAt, user.Balance), "avatar": user.Avatar,
} "created_at": user.CreatedAt,
"last_login_at": user.LastLoginAt,
}
var userDevices []model.UserDevice subscription = map[string]interface{}{
database.DB.Where("user_id = ? AND application_id = ?", user.ID, app.ID).Find(&userDevices) "balance": user.Balance,
for _, d := range userDevices { "is_trial_user": user.IsTrialUser,
devices = append(devices, map[string]interface{}{ "trial_start_at": user.TrialStartAt,
"id": d.ID, "trial_end_at": user.TrialEndAt,
"device_id": d.DeviceID, "expiry_at": user.ExpiryAt,
"device_name": d.DeviceName, "is_expired": user.ExpiryAt != nil && user.ExpiryAt.Before(time.Now()),
"device_type": d.DeviceType, "is_lifetime": user.Balance == -1,
"status": d.Status, "days_remaining": calculateDaysRemaining(user.ExpiryAt, user.Balance),
"created_at": d.CreatedAt, }
})
}
var userVars []model.UserVariable var userDevices []model.UserDevice
database.DB.Where("user_id = ? AND app_id = ?", user.ID, app.ID).Find(&userVars) database.DB.Where("user_id = ? AND application_id = ?", user.ID, app.ID).Find(&userDevices)
for _, v := range userVars { for _, d := range userDevices {
userVariables[v.VarName] = v.VarValue devices = append(devices, map[string]interface{}{
} "id": d.ID,
"device_id": d.DeviceID,
"device_name": d.DeviceName,
"device_type": d.DeviceType,
"status": d.Status,
"created_at": d.CreatedAt,
})
}
var userVars []model.UserVariable
database.DB.Where("user_id = ? AND app_id = ?", user.ID, app.ID).Find(&userVars)
for _, v := range userVars {
userVariables[v.VarName] = v.VarValue
} }
} }