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 {
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user