From 52f4e954149bfa5f15ac58a816ac8b0b8bf26c18 Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Mon, 1 Jun 2026 12:40:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9F=9F=E8=83=BD?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=95=B0=E6=8D=AE=E8=A1=A8=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E5=8F=8A=E9=A6=96=E6=AC=A1=E6=9F=A5=E8=AF=A2=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AutoMigrate 添加 EnergyLog、PostEnergizeLog、DailyExpSummary 三张表 - GetDailyEnergizeExp 无记录时返回 nil, nil 而非 gorm.ErrRecordNotFound - 调用方增加 summary nil 检查,防止空指针 --- cmd/server/main.go | 2 +- internal/repository/energy_repo.go | 5 +++++ internal/service/energy_service.go | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) 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 }