修复resisted记录被默认值覆盖为1的问题
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user