package dao import ( "errors" "gorm.io/gorm" "integrity-checkin/data/dto" "integrity-checkin/data/po" "time" ) type CheckinDAO struct { Tx *gorm.DB } func (c CheckinDAO) FindUserActivityByDay(userID int, activityID int, day string) *po.UserActivity { var userActivity po.UserActivity err := c.Tx.Take(&userActivity, "user_id=? and activity_id=? and day=?", userID, activityID, day).Error if err == gorm.ErrRecordNotFound { return nil } if err != nil { panic(err) } return &userActivity } func (c CheckinDAO) CreateCheckin(userID int, activityID int, image string) (*po.UserActivity, error) { if activity := c.FindActivityByID(activityID); activity == nil { return nil, errors.New("activityID不存在") } userActivity := po.UserActivity{ UserID: userID, UserActivityForm: po.UserActivityForm{ ActivityID: activityID, Image: image, }, Status: 1, Day: time.Now().Format("20060102"), } err := c.Tx.Create(&userActivity).Error if err != nil { panic(err) } return &userActivity, nil } func (c CheckinDAO) FindActivityByID(id int) *po.Activity { var activity po.Activity err := c.Tx.Take(&activity, id).Error if err == gorm.ErrRecordNotFound { return nil } if err != nil { panic(err) } return &activity } func (c CheckinDAO) FindUserActivityByID(id int) *po.UserActivity { var userActivity po.UserActivity err := c.Tx.Take(&userActivity, id).Error if err == gorm.ErrRecordNotFound { return nil } if err != nil { panic(err) } return &userActivity } func (c CheckinDAO) SaveUserActivity(userActivity *po.UserActivity) { err := c.Tx.Save(userActivity).Error if err != nil { panic(err) } } func (c CheckinDAO) FindAllActivities() []po.Activity { var arr []po.Activity err := c.Tx.Find(&arr).Error if err != nil { panic(err) } return arr } func getUserActivityExtendedSQL(where string) string { return "select ua.*,a.category activity_category," + "a.name activity_name from user_activity ua left join activities a on a.id=ua.activity_id " + where + " order by created_at desc" } func (c CheckinDAO) FindAllUserActivities() []dto.UserActivityExtended { var arr []dto.UserActivityExtended err := c.Tx.Raw(getUserActivityExtendedSQL("")).Find(&arr).Error if err != nil { panic(err) } return arr } func (c CheckinDAO) FindUserActivityExtendedByID(id int) *dto.UserActivityExtended { var userActivityExtended dto.UserActivityExtended err := c.Tx.Raw(getUserActivityExtendedSQL("where id=?"), id).Take(&userActivityExtended).Error if err == gorm.ErrRecordNotFound { return nil } if err != nil { panic(err) } return &userActivityExtended } func (c CheckinDAO) FindUserActivitiesToday(userID int, day string) []po.UserActivity { var userActivities []po.UserActivity err := c.Tx.Find(&userActivities, "user_id=? and day=?", userID, day).Error if err != nil { panic(err) } return userActivities }