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"))) }