From 1e18be8326932815fc78dcb5cbd81482c0ba19a7 Mon Sep 17 00:00:00 2001 From: maguodong Date: Sat, 28 Mar 2026 16:13:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor(database):=20=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A8=A1=E5=9E=8B=E6=97=B6=E9=97=B4=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除自定义 DateTime 类型及其 JSON 序列化/反序列化实现 - 将 CreateTime 和 UpdateTime 字段类型从 DateTime 改为 string - 添加 GORM 的 BeforeCreate 和 BeforeUpdate 钩子函数 - 使用 time.Now().Format 直接格式化时间字符串 - 移除冗余的 driver.Valuer 和 sql.Scanner 接口实现 --- database/model/base.go | 79 +++++++----------------------------------- 1 file changed, 13 insertions(+), 66 deletions(-) diff --git a/database/model/base.go b/database/model/base.go index 9e38b49..7e1ada4 100644 --- a/database/model/base.go +++ b/database/model/base.go @@ -1,78 +1,25 @@ package model import ( - "database/sql/driver" - "encoding/json" - "fmt" "time" + + "gorm.io/gorm" ) -// DateTime 自定义时间类型 -type DateTime struct { - time.Time +// BaseModel 基础模型 +type BaseModel struct { + ID uint `gorm:"column:id;primaryKey;autoIncrement;common:主键ID" json:"id"` + CreateTime string `gorm:"autoCreateTime;column:create_time;type:datetime" json:"create_time"` + UpdateTime string `gorm:"autoUpdateTime;column:update_time;type:datetime" json:"update_time"` } -// MarshalJSON 实现 JSON 序列化 -func (t DateTime) MarshalJSON() ([]byte, error) { - if t.IsZero() { - return []byte("null"), nil - } - return json.Marshal(t.Format("2006-01-02 15:04:05")) -} - -// UnmarshalJSON 实现 JSON 反序列化 -func (t *DateTime) UnmarshalJSON(data []byte) error { - var s string - if err := json.Unmarshal(data, &s); err != nil { - return err - } - if s == "" || s == "null" { - t.Time = time.Time{} - return nil - } - - parsed, err := time.Parse("2006-01-02 15:04:05", s) - if err != nil { - return err - } - t.Time = parsed +func (b BaseModel) BeforeCreate(tx *gorm.DB) error { + b.CreateTime = time.Now().Format("2006-01-02 15:04:05") + b.UpdateTime = time.Now().Format("2006-01-02 15:04:05") return nil } -// Value 实现 driver.Valuer -func (t DateTime) Value() (driver.Value, error) { - if t.IsZero() { - return nil, nil - } - return t.Time, nil -} - -// Scan 实现 sql.Scanner -func (t *DateTime) Scan(v interface{}) error { - if v == nil { - t.Time = time.Time{} - return nil - } - - switch value := v.(type) { - case time.Time: - t.Time = value - return nil - case string: - parsed, err := time.Parse("2006-01-02 15:04:05", value) - if err != nil { - return err - } - t.Time = parsed - return nil - default: - return fmt.Errorf("unsupported type: %T", v) - } -} - -// 基础模型 -type BaseModel struct { - ID uint `gorm:"column:id;primaryKey;autoIncrement;common:主键ID" json:"id"` - CreateTime DateTime `gorm:"autoCreateTime;column:create_time;type:datetime" json:"create_time"` - UpdateTime DateTime `gorm:"autoUpdateTime;column:update_time;type:datetime" json:"update_time"` +func (b BaseModel) BeforeUpdate(tx *gorm.DB) error { + b.UpdateTime = time.Now().Format("2006-01-02 15:04:05") + return nil }