1 Star 0 Fork 0

jackly-chao / joy-admin-server

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
model.go 2.57 KB
一键复制 编辑 原始数据 按行查看 历史
package common
import (
"database/sql/driver"
"encoding/json"
"time"
"gorm.io/gorm"
)
// 额外的通用模型,包含:名称,是否启用,排序
type ExtraModel struct {
Name string `gorm:"column:name;comment:名称" json:"name" form:"name"` // 名称
IsEnable *bool `gorm:"column:is_enable;comment:是否启用" json:"isEnable" form:"isEnable"` // 是否启用
Sort *int64 `gorm:"column:sort;comment:排序" json:"sort" form:"sort"` // 排序
}
// 通用模型,参考gorm.Model
type Model struct {
Id int64 `gorm:"column:id;comment:Id;primarykey" json:"id" form:"id"` // Id
CreateTime CustomTime `gorm:"column:create_time;comment:创建时间;<-:create" json:"createTime" form:"createTime"` // 创建时间,格式:yyyy-MM-dd HH:mm:ss
UpdateTime CustomTime `gorm:"column:update_time;comment:修改时间" json:"updateTime" form:"updateTime"` // 修改时间,格式:yyyy-MM-dd HH:mm:ss
DeleteTime gorm.DeletedAt `gorm:"column:delete_time;comment:删除时间;index" json:"-" form:"deleteTime"` // 删除时间,格式:yyyy-MM-dd HH:mm:ss
}
// 自定义时间类型,为了能够自定义时间类型的反序列化格式
type CustomTime time.Time
const timeFormart = "2006-01-02 15:04:05"
// 自定义时间类型的序列化格式,可参考Go/src/time/time.go的UnmarshalJSON
func (t *CustomTime) UnmarshalJSON(data []byte) error {
time, err := time.ParseInLocation(`"`+timeFormart+`"`, string(data), time.Local)
if err != nil {
return nil
}
*t = CustomTime(time)
return nil
}
// 自定义时间类型的反序列化格式,可参考Go/src/time/time.go的MarshalJSON
func (t CustomTime) MarshalJSON() ([]byte, error) {
time := time.Time(t)
return json.Marshal(time.Format(timeFormart))
}
func (t CustomTime) String() string {
return time.Time(t).Format(timeFormart)
}
// 实现 sql.Scanner 接口,Scan 将 value 扫描至 Jsonb
func (t *CustomTime) Scan(value interface{}) error {
*t = CustomTime((value.(time.Time)))
return nil
}
// 实现 driver.Valuer 接口,Value 返回 json value
func (t CustomTime) Value() (driver.Value, error) {
time := time.Time(t)
return time, nil
}
// 模型创建前的钩子,给创建时间和修改时间赋值
func (m *Model) BeforeCreate(tx *gorm.DB) (err error) {
m.CreateTime = CustomTime(time.Now())
m.UpdateTime = CustomTime(time.Now())
return
}
// 模型修改前的钩子,给修改时间赋值
func (m *Model) BeforeUpdate(tx *gorm.DB) (err error) {
m.UpdateTime = CustomTime(time.Now())
return
}
Go
1
https://gitee.com/jackly-chao/joy-admin-server.git
git@gitee.com:jackly-chao/joy-admin-server.git
jackly-chao
joy-admin-server
joy-admin-server
01c5a3fec7ab

搜索帮助