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