fix: 修复域能相关数据表缺失及首次查询报错

- AutoMigrate 添加 EnergyLog、PostEnergizeLog、DailyExpSummary 三张表
- GetDailyEnergizeExp 无记录时返回 nil, nil 而非 gorm.ErrRecordNotFound
- 调用方增加 summary nil 检查,防止空指针
This commit is contained in:
2026-06-01 12:40:30 +08:00
parent 8cadd19253
commit 52f4e95414
3 changed files with 8 additions and 3 deletions

View File

@ -27,7 +27,7 @@ func main() {
if err != nil { if err != nil {
log.Fatalf("连接数据库失败: %v", err) 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) log.Fatalf("数据库迁移失败: %v", err)
} }

View File

@ -1,6 +1,7 @@
package repository package repository
import ( import (
"errors"
"time" "time"
"metazone.cc/metalab/internal/model" "metazone.cc/metalab/internal/model"
@ -80,9 +81,13 @@ func (r *EnergyRepo) CreateEnergizeLog(log *model.PostEnergizeLog) error {
} }
// GetDailyEnergizeExp 获取用户当日通过赋能获得的经验值 // GetDailyEnergizeExp 获取用户当日通过赋能获得的经验值
// 无记录时返回 nil, nil调用方当作 exp=0 处理)
func (r *EnergyRepo) GetDailyEnergizeExp(userID uint, date time.Time) (*model.DailyExpSummary, error) { func (r *EnergyRepo) GetDailyEnergizeExp(userID uint, date time.Time) (*model.DailyExpSummary, error) {
var s model.DailyExpSummary var s model.DailyExpSummary
err := r.db.Where("user_id = ? AND date = ?", userID, date).First(&s).Error 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 { if err != nil {
return nil, err return nil, err
} }

View File

@ -160,7 +160,7 @@ func (s *EnergyService) Energize(energizerID uint, postID uint, amount int) (int
summary, err := txRepo.GetDailyEnergizeExp(energizerID, today) summary, err := txRepo.GetDailyEnergizeExp(energizerID, today)
currentDaily := 0 currentDaily := 0
if err == nil { if err == nil && summary != nil {
currentDaily = summary.ExpEarned currentDaily = summary.ExpEarned
} }
@ -305,7 +305,7 @@ func (s *EnergyService) GetEnergyInfo(userID uint) (*EnergyInfo, error) {
dailyExp := 0 dailyExp := 0
summary, err := s.repo.GetDailyEnergizeExp(userID, today) summary, err := s.repo.GetDailyEnergizeExp(userID, today)
if err == nil { if err == nil && summary != nil {
dailyExp = summary.ExpEarned dailyExp = summary.ExpEarned
} }