integrity-checkin/dao/checkin.go
2023-02-24 20:41:47 +08:00

125 行
3.2 KiB
Go

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, files 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,
Files: files,
},
Status: 1,
Day: time.Now().Format("20060102"),
Credit: 0,
}
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(isTeacher bool) []po.Activity {
var arr []po.Activity
var err error
if isTeacher {
err = c.Tx.Find(&arr, "teacher_available=?", true).Error
} else {
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,u.real_name,u.username from user_activity ua left join activities a on a.id=ua.activity_id " +
"left join users u on u.id=ua.user_id " + where +
" order by created_at desc"
}
func (c CheckinDAO) FindUserActivitiesByStatusUserType(status int, userType int) []dto.UserActivityExtended {
var arr []dto.UserActivityExtended
var err error
if status != 0 {
err = c.Tx.Raw(getUserActivityExtendedSQL("where status=? and u.type=?"), status, userType).Find(&arr).Error
} else {
err = c.Tx.Raw(getUserActivityExtendedSQL("where u.type=?"), userType).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
}