diff --git a/cmd/server/main.go b/cmd/server/main.go index e1eb9e1..6f2b918 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -27,7 +27,7 @@ func main() { if err != nil { log.Fatalf("连接数据库失败: %v", err) } - if err := db.AutoMigrate(&model.User{}, &model.AuditSubmission{}, &model.SiteSetting{}, &model.Notification{}, &model.Post{}, &model.UserCheckIn{}, &model.UserTask{}); err != nil { + if err := db.AutoMigrate(&model.User{}, &model.AuditSubmission{}, &model.SiteSetting{}, &model.Notification{}, &model.Post{}, &model.UserCheckIn{}, &model.UserTask{}, &model.EnergyLog{}, &model.PostEnergizeLog{}, &model.DailyExpSummary{}); err != nil { log.Fatalf("数据库迁移失败: %v", err) } diff --git a/internal/repository/energy_repo.go b/internal/repository/energy_repo.go index 8720622..8058324 100644 --- a/internal/repository/energy_repo.go +++ b/internal/repository/energy_repo.go @@ -1,6 +1,7 @@ package repository import ( + "errors" "time" "metazone.cc/metalab/internal/model" @@ -80,9 +81,13 @@ func (r *EnergyRepo) CreateEnergizeLog(log *model.PostEnergizeLog) error { } // GetDailyEnergizeExp 获取用户当日通过赋能获得的经验值 +// 无记录时返回 nil, nil(调用方当作 exp=0 处理) func (r *EnergyRepo) GetDailyEnergizeExp(userID uint, date time.Time) (*model.DailyExpSummary, error) { var s model.DailyExpSummary err := r.db.Where("user_id = ? AND date = ?", userID, date).First(&s).Error + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil + } if err != nil { return nil, err } diff --git a/internal/service/energy_service.go b/internal/service/energy_service.go index 768270b..3b1b386 100644 --- a/internal/service/energy_service.go +++ b/internal/service/energy_service.go @@ -160,7 +160,7 @@ func (s *EnergyService) Energize(energizerID uint, postID uint, amount int) (int summary, err := txRepo.GetDailyEnergizeExp(energizerID, today) currentDaily := 0 - if err == nil { + if err == nil && summary != nil { currentDaily = summary.ExpEarned } @@ -305,7 +305,7 @@ func (s *EnergyService) GetEnergyInfo(userID uint) (*EnergyInfo, error) { dailyExp := 0 summary, err := s.repo.GetDailyEnergizeExp(userID, today) - if err == nil { + if err == nil && summary != nil { dailyExp = summary.ExpEarned }