diff --git a/dao/checkin.go b/dao/checkin.go index 3a9157d..b0442dc 100644 --- a/dao/checkin.go +++ b/dao/checkin.go @@ -23,6 +23,17 @@ func (c CheckinDAO) FindUserActivityByDay(userID int, activityID int, day string } return &userActivity } +func (c CheckinDAO) FindUserActivityInHistorySince(userID int, activityID int) *po.UserActivity { + var userActivity po.UserActivity + err := c.Tx.Take(&userActivity, "user_id=? and activity_id=?", userID, activityID).Error + if err == gorm.ErrRecordNotFound { + return nil + } + if err != nil { + panic(err) + } + return &userActivity +} func (c CheckinDAO) CreateCheckin(userID int, activityID int, files string) (*po.UserActivity, error) { if activity := c.FindActivityByID(activityID); activity == nil { return nil, errors.New("activityID不存在") diff --git a/data/po/checkin.go b/data/po/checkin.go index d4c743e..bd9e271 100644 --- a/data/po/checkin.go +++ b/data/po/checkin.go @@ -10,6 +10,8 @@ type Activity struct { Name string `json:"name"` Image string `json:"image"` Credit int `json:"credit"` + Visible int `json:"visible"` + Limit int `json:"limit"` TeacherAvailable int `json:"teacher_available"` } diff --git a/service/checkin.go b/service/checkin.go index ae44869..7351ef2 100644 --- a/service/checkin.go +++ b/service/checkin.go @@ -25,6 +25,16 @@ func (c CheckinService) Submit(aw *app.Wrapper) app.Result { return aw.Error(err.Error()) } today := time.Now().Format("20060102") + // 检查是否为限制打卡总次数的活动 + activity := checkinDAO.FindActivityByID(req.ActivityID) + if activity == nil { + return aw.Error("活动不存在") + } else if activity.Limit > 0 { + if checkinDAO.FindUserActivityInHistorySince(uc.UserID, req.ActivityID) != nil { + return aw.Error("该打卡活动已经达到限制次数") + } + } + // 检查当天是否已经打卡过 if checkinDAO.FindUserActivityByDay(uc.UserID, req.ActivityID, today) != nil { return aw.Error("您今天已参加过该项目,请明天再来") }