Files
integrity-checkin/service/checkin.go
2023-01-30 12:12:53 +08:00

95 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 {
user := userDAO.FindUserByID(aw.ExtractUserClaims().UserID)
isTeacher := false
if user.Type == 2 {
isTeacher = true
}
return aw.Success(checkinDAO.FindAllActivities(isTeacher))
}
func (c CheckinService) ListUserActivities(aw *app.Wrapper) app.Result {
uc := aw.ExtractUserClaims()
type StatusReq struct {
Status int `form:"status"`
}
var req StatusReq
if err := aw.Ctx.ShouldBind(&req); err != nil {
return aw.Error(err.Error())
}
user := userDAO.FindUserByID(uc.UserID)
return aw.Success(checkinDAO.FindUserActivitiesByStatusUserType(req.Status, user.Type))
}
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")))
}