2022-11-26 20:29:52 +08:00

88 行
2.5 KiB
Go

package service
import (
"integrity-checkin/data/po"
"integrity-checkin/pkg/app"
"strconv"
"time"
)
type CheckinService struct {
}
func (c CheckinService) Submit(aw *app.Wrapper) app.Result {
uc := aw.ExtractUserClaims()
var req po.UserActivityForm
if err := aw.Ctx.ShouldBind(&req); err != nil {
return aw.Error(err.Error())
}
if err := req.Validate(); err != nil {
return aw.Error(err.Error())
}
today := time.Now().Format("20060102")
if checkinDAO.FindUserActivityByDay(uc.UserID, req.ActivityID, today) != nil {
return aw.Error("您今天已参加过该项目,请明天再来")
}
userActivity, err := checkinDAO.CreateCheckin(uc.UserID, req.ActivityID, req.Image)
if err != nil {
return aw.Error(err.Error())
}
return aw.Success(userActivity)
}
func (c CheckinService) SetStatus(aw *app.Wrapper) app.Result {
type SetStatusReq struct {
ID int `form:"id" binding:"required"`
Status int `form:"status" binding:"required"`
Credit int `form:"credit"`
}
var req SetStatusReq
if err := aw.Ctx.ShouldBind(&req); err != nil {
return aw.Error(err.Error())
}
userActivity := checkinDAO.FindUserActivityByID(req.ID)
if userActivity == nil {
return aw.Error("打卡不存在")
}
if userActivity.Status != 1 {
return aw.Error("已经审核过此打卡")
}
if req.Status == 1 {
return aw.Error("只能是 2通过,3拒绝")
}
if req.Status == 2 { // pass
if req.Credit < 1 {
return aw.Error("打分无效")
}
user := userDAO.FindUserByID(userActivity.UserID)
user.Credit += req.Credit
userActivity.Credit = req.Credit
userDAO.SaveUser(user)
}
userActivity.Status = req.Status
checkinDAO.SaveUserActivity(userActivity)
return aw.Success(userActivity)
}
func (c CheckinService) ListActivities(aw *app.Wrapper) app.Result {
return aw.Success(checkinDAO.FindAllActivities())
}
func (c CheckinService) ListUserActivities(aw *app.Wrapper) app.Result {
type StatusReq struct {
Status int `form:"status"`
}
var req StatusReq
if err := aw.Ctx.ShouldBind(&req); err != nil {
return aw.Error(err.Error())
}
return aw.Success(checkinDAO.FindAllUserActivities(req.Status))
}
func (c CheckinService) GetUserActivity(aw *app.Wrapper) app.Result {
id, err := strconv.Atoi(aw.Ctx.Query("id"))
if err != nil {
return aw.Error(err.Error())
}
return aw.Success(checkinDAO.FindUserActivityByID(id))
}
func (c CheckinService) GetMyActivitiesToday(aw *app.Wrapper) app.Result {
return aw.Success(checkinDAO.FindUserActivitiesToday(aw.ExtractUserClaims().UserID, time.Now().Format("20060102")))
}