互动
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.5 KiB

package client
import (
"hudongzhuanjia/controllers"
"hudongzhuanjia/models"
"hudongzhuanjia/utils/code"
"hudongzhuanjia/utils/define"
)
type CalorieCtl struct {
controllers.AuthorCtl
}
// h5 1/s
func (t *CalorieCtl) Shake() {
calorieId := t.MustGetInt64("calorie_id")
score := t.DefaultInt("score", 0)
uid := t.MustGetUID()
calorie := new(models.Calorie)
exist, err := models.Get(calorie, calorieId)
t.CheckErr(err)
t.Assert(exist, code.MSG_CALORIE_NOT_EXIST, "卡路里不存在")
activity := new(models.Activity)
exist, err = models.Get(activity, calorie.ActivityId)
t.CheckErr(err)
t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
t.CheckRunning(activity.Status)
calorieUser := new(models.CalorieUser)
exist, err = calorieUser.GetByCalorieIdAndUserId(calorieId, uid, activity.RehearsalId)
t.CheckErr(err)
t.Assert(exist, code.MSG_DATA_NOT_EXIST, "您尚未参与卡路里活动")
// 增加score
if calorie.Status == define.StatusRunning && score > 0 {
_, err = calorieUser.IncrScore(score)
t.CheckErr(err)
calorieUser.Score += int64(score) // 增加
}
count, err := calorieUser.CountByCalorieId(calorie.Id, activity.RehearsalId)
t.CheckErr(err)
users, err := models.GetCalorieUsersByCalorieIdAndScore(calorie.Id, activity.RehearsalId, calorieUser.Score)
t.CheckErr(err)
var rank int
for index, user := range users {
if user.Id == calorieUser.Id {
rank = int(count) - len(users) + index + 1
break
}
}
t.JSON(map[string]interface{}{
"rank": rank,
"score": calorieUser.Score, // 分数
})
}