diff --git a/database/model/base.go b/database/model/base.go index 75e27ff..88f9473 100644 --- a/database/model/base.go +++ b/database/model/base.go @@ -1,33 +1,49 @@ package model import ( + "database/sql/driver" + "fmt" "time" - - "gorm.io/gorm" ) +// LocalTime 自定义时间类型,支持 null 值 +type LocalTime struct { + time.Time +} + +func (t *LocalTime) MarshalJSON() ([]byte, error) { + if t == nil || t.IsZero() { + return []byte("null"), nil + } + formatted := fmt.Sprintf("\"%s\"", t.Format("2006-01-02 15:04:05")) + return []byte(formatted), nil +} + +func (t *LocalTime) Value() (driver.Value, error) { + if t == nil || t.IsZero() { + return nil, nil + } + return t.Time, nil +} + +func (t *LocalTime) 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 + default: + return fmt.Errorf("unsupported type: %T", v) + } +} + // BaseModel 基础模型,包含自定义的创建时间和更新时间 type BaseModel struct { - Id int `json:"id" gorm:"column:id;primaryKey;autoIncrement;common:主键ID"` // 主键 ID - CreateTime time.Time `json:"create_time" gorm:"column:create_time;type:datetime;autoCreateTime;common:创建时间"` - UpdateTime time.Time `json:"update_time" gorm:"column:update_time;type:datetime;autoUpdateTime;common:更新时间"` -} - -// BeforeCreate 创建前自动设置时间 -func (b *BaseModel) BeforeCreate(tx *gorm.DB) error { - now := time.Now() - b.CreateTime = now - b.UpdateTime = now - return nil -} - -// BeforeUpdate 更新前自动更新时间 -func (b *BaseModel) BeforeUpdate(tx *gorm.DB) error { - b.UpdateTime = time.Now() - return nil -} - -func (b *BaseModel) AfterFind(tx *gorm.DB) error { - b.UpdateTime = time.Now() - return nil + Id int `json:"id" gorm:"column:id;primaryKey;autoIncrement;common:主键ID"` // 主键 ID + CreateTime *LocalTime `json:"create_time" gorm:"column:create_time;type:datetime;autoCreateTime;common:创建时间"` + UpdateTime *LocalTime `json:"update_time" gorm:"column:update_time;type:datetime;autoUpdateTime;common:更新时间"` }