修复resisted记录被默认值覆盖为1的问题

This commit is contained in:
root
2026-03-04 01:03:04 +08:00
parent bdd34785ef
commit ff16ea09d2
2 changed files with 110 additions and 4 deletions
+40 -4
View File
@@ -19,6 +19,24 @@ type SmokeLogService struct {
db *gorm.DB db *gorm.DB
} }
// smokeLogCreateRow 用于写入 fa_smoke_log,避免 SmokeLog 的 default 标签覆盖 0 值。
type smokeLogCreateRow struct {
ID int `gorm:"column:id;primaryKey;autoIncrement"`
UID int `gorm:"column:uid"`
SmokeTime *time.Time `gorm:"column:smoke_time"`
SmokeAt *time.Time `gorm:"column:smoke_at"`
Remark string `gorm:"column:remark"`
CreateTime *int64 `gorm:"column:createtime"`
UpdateTime *int64 `gorm:"column:updatetime"`
DeleteTime *int64 `gorm:"column:deletetime"`
Level *int64 `gorm:"column:level"`
Num *int `gorm:"column:num"`
}
func (smokeLogCreateRow) TableName() string {
return "fa_smoke_log"
}
func NewSmokeLogService(db *gorm.DB) *SmokeLogService { func NewSmokeLogService(db *gorm.DB) *SmokeLogService {
return &SmokeLogService{db: db} return &SmokeLogService{db: db}
} }
@@ -59,20 +77,38 @@ func (s *SmokeLogService) Create(ctx context.Context, uid int, req CreateSmokeLo
smokeTime = &startOfDay smokeTime = &startOfDay
} }
record := smokemodel.SmokeLog{ insert := smokeLogCreateRow{
UID: uid, UID: uid,
SmokeTime: smokeTime, SmokeTime: smokeTime,
SmokeAt: smokeAt, SmokeAt: smokeAt,
Remark: req.Remark, Remark: req.Remark,
CreateTime: &createTime, CreateTime: &createTime,
UpdateTime: &updateTime, UpdateTime: &updateTime,
Level: level, Level: &level,
Num: num, Num: &num,
} }
if err := s.db.WithContext(ctx).Create(&record).Error; err != nil { if err := s.db.WithContext(ctx).Create(&insert).Error; err != nil {
return nil, fmt.Errorf("create smoke log: %w", err) return nil, fmt.Errorf("create smoke log: %w", err)
} }
record := smokemodel.SmokeLog{
ID: insert.ID,
UID: insert.UID,
SmokeTime: insert.SmokeTime,
SmokeAt: insert.SmokeAt,
Remark: insert.Remark,
CreateTime: insert.CreateTime,
UpdateTime: insert.UpdateTime,
DeleteTime: insert.DeleteTime,
}
if insert.Level != nil {
record.Level = *insert.Level
}
if insert.Num != nil {
record.Num = *insert.Num
}
return &record, nil return &record, nil
} }
@@ -0,0 +1,70 @@
package service
import (
"context"
"testing"
"time"
smokemodel "wx_service/internal/smoke/model"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func setupSmokeLogServiceTestDB(t *testing.T) *gorm.DB {
t.Helper()
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
t.Fatalf("open sqlite: %v", err)
}
if err := db.Exec(`
CREATE TABLE fa_smoke_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
uid INTEGER NOT NULL,
smoke_time DATE NULL,
smoke_at DATETIME NULL,
remark TEXT,
createtime INTEGER,
updatetime INTEGER,
deletetime INTEGER,
level INTEGER DEFAULT 1,
num INTEGER DEFAULT 1
)`).Error; err != nil {
t.Fatalf("create fa_smoke_log: %v", err)
}
return db
}
func TestSmokeLogServiceCreateKeepsZeroForResisted(t *testing.T) {
t.Parallel()
db := setupSmokeLogServiceTestDB(t)
svc := NewSmokeLogService(db)
smokeAt := time.Date(2026, 3, 4, 0, 59, 0, 0, time.Local)
_, err := svc.Create(context.Background(), 1001, CreateSmokeLogRequest{
SmokeAt: &smokeAt,
Remark: "resist",
Level: 0,
Num: 0,
})
if err != nil {
t.Fatalf("create resisted log: %v", err)
}
var got smokemodel.SmokeLog
if err := db.Where("uid = ?", 1001).Order("id DESC").First(&got).Error; err != nil {
t.Fatalf("load created record: %v", err)
}
if got.Level != 0 || got.Num != 0 {
t.Fatalf("created resisted log level/num=(%d,%d), want=(0,0)", got.Level, got.Num)
}
}