refactor(database): 简化基础模型时间处理逻辑

- 移除自定义 DateTime 类型及其 JSON 序列化/反序列化实现
- 将 CreateTime 和 UpdateTime 字段类型从 DateTime 改为 string
- 添加 GORM 的 BeforeCreate 和 BeforeUpdate 钩子函数
- 使用 time.Now().Format 直接格式化时间字符串
- 移除冗余的 driver.Valuer 和 sql.Scanner 接口实现
main v1.0.1026
maguodong 2026-03-28 16:13:54 +08:00
parent 21e9f7c79d
commit 1e18be8326
1 changed files with 13 additions and 66 deletions

View File

@ -1,78 +1,25 @@
package model package model
import ( import (
"database/sql/driver"
"encoding/json"
"fmt"
"time" "time"
"gorm.io/gorm"
) )
// DateTime 自定义时间类型 // BaseModel 基础模型
type DateTime struct { type BaseModel struct {
time.Time 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 (b BaseModel) BeforeCreate(tx *gorm.DB) error {
func (t DateTime) MarshalJSON() ([]byte, error) { b.CreateTime = time.Now().Format("2006-01-02 15:04:05")
if t.IsZero() { b.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
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
return nil return nil
} }
// Value 实现 driver.Valuer func (b BaseModel) BeforeUpdate(tx *gorm.DB) error {
func (t DateTime) Value() (driver.Value, error) { b.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
if t.IsZero() { return nil
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"`
} }