fix: 修复域能相关数据表缺失及首次查询报错
- AutoMigrate 添加 EnergyLog、PostEnergizeLog、DailyExpSummary 三张表 - GetDailyEnergizeExp 无记录时返回 nil, nil 而非 gorm.ErrRecordNotFound - 调用方增加 summary nil 检查,防止空指针
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user