package user import ( "database/sql" "net/http" "toutoukan/init/databaseInit" "github.com/gin-gonic/gin" ) // UserReq 定义了请求中用户ID的结构体 type UserReq struct { Uid string `json:"uid" binding:"required,min=1,max=50"` } func GetScore(c *gin.Context) { var req UserReq // 1. 解析并验证请求参数 if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "参数解析失败", "detail": err.Error(), }) return } // 2. 根据 user_id 查询用户总积分 // 使用 sql.NullInt64 来处理 SUM 函数可能返回 NULL 的情况 var totalPoints sql.NullInt64 if err := databaseInit.UserDB.Table("user_points"). Where("user_id = ?", req.Uid). Select("SUM(points_change)"). Scan(&totalPoints).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": "查询用户积分失败: " + err.Error(), }) return } // 3. 返回查询结果 // 检查 totalPoints 是否为 NULL,如果是则返回 0 finalPoints := 0 if totalPoints.Valid { finalPoints = int(totalPoints.Int64) } c.JSON(http.StatusOK, gin.H{ "success": true, "message": "查询成功", "data": gin.H{ "user_id": req.Uid, "total_points": finalPoints, }, }) }