integrity-checkin/dao/checkin.go

113 行
2.8 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, 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
}