package cp_r import ( "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/mycontext" "git.hilo.cn/hilo-common/resource/mysql" "github.com/gin-gonic/gin" "github.com/jinzhu/now" "hilo-user/cv/cp_cv" "hilo-user/cv/user_cv" "hilo-user/domain/model/cp_m" "hilo-user/myerr/bizerr" "hilo-user/req" "hilo-user/resp" "time" ) // @Tags CP v2 // @Summary 排行榜 // @Param token header string true "token" // @Param nonce header string true "随机数字" // @Param pageIndex query int true "偏移值 默认:1" default(1) // @Param pageSize query int true "请求数量 默认:10" default(10) // @Param queryType path string true "类型:day/week/month" // @Success 200 {object} []cp_cv.CvCp // @Router /v2/cp/rank/{queryType} [get] func CpRank(c *gin.Context) (*mycontext.MyContext, error) { myCtx := mycontext.CreateMyContext(c.Keys) userId, err := req.GetUserId(c) if err != nil { return myCtx, err } pageReq := new(req.PageReqBase) if err := c.ShouldBindQuery(pageReq); err != nil { return myCtx, err } if pageReq.PageIndex == 0 { pageReq.PageIndex = 1 } queryType := c.Param("queryType") if queryType != "day" && queryType != "week" && queryType != "month" { return myCtx, bizerr.InvalidParameter } var beginDate, endDate string switch queryType { case "day": beginDate, endDate = time.Now().Format("2006-01-02"), time.Now().Format("2006-01-02") case "week": beginDate = now.BeginningOfWeek().Format("2006-01-02") endDate = now.EndOfWeek().Format("2006-01-02") case "month": beginDate = now.BeginningOfMonth().Format("2006-01-02") endDate = now.EndOfMonth().Format("2006-01-02") } offset, limit := (pageReq.PageIndex-1)*pageReq.PageSize, pageReq.PageSize model := domain.CreateModelContext(myCtx) ranks := cp_m.PageCpDayRank(model, beginDate, endDate, offset, limit) var response []cp_cv.CvCp var userIds []mysql.ID for _, rank := range ranks { userIds = append(userIds, rank.UserId1) userIds = append(userIds, rank.UserId2) } userBase, err := user_cv.GetUserBaseMap(userIds, userId) if err != nil { return myCtx, err } for i, rank := range ranks { response = append(response, cp_cv.CvCp{ CpId: rank.CpId, User1: userBase[rank.UserId1], User2: userBase[rank.UserId2], Score: rank.Score, Ranking: i + 1 + offset, }) } resp.ResponsePageBaseOk(c, response, pageReq.PageIndex+1, len(ranks) < pageReq.PageSize) return myCtx, nil }