@@ -4,10 +4,10 @@ import (
44 "fmt"
55 "reflect"
66 "strings"
7+ "time"
78
89 "github.com/gin-gonic/gin"
910 "gorm.io/gorm"
10- "gorm.io/gorm/schema"
1111)
1212
1313/*
@@ -18,11 +18,9 @@ import (
1818 */
1919
2020type Model struct {
21- Table string `json:"tableName" yaml:"tableName" binding:"required"`
22- AutoCreateTime schema.TimeType `json:"autoCreateTime" yaml:"autoCreateTime"`
23- AutoUpdateTime schema.TimeType `json:"autoUpdateTime" yaml:"autoUpdateTime"`
24- HardDeleted bool `json:"hardDeleted" yaml:"hardDeleted"`
25- Fields []* Field `json:"fields" yaml:"fields" binding:"required"`
21+ Table string `json:"tableName" yaml:"tableName" binding:"required"`
22+ HardDeleted bool `json:"hardDeleted" yaml:"hardDeleted"`
23+ Fields []* Field `json:"fields" yaml:"fields" binding:"required"`
2624}
2725
2826// TableName get table name
@@ -42,12 +40,6 @@ func (m *Model) PrimaryKeys() []string {
4240}
4341
4442func (m * Model ) Init () {
45- if m .AutoCreateTime == 0 {
46- m .AutoCreateTime = schema .UnixSecond
47- }
48- if m .AutoUpdateTime == 0 {
49- m .AutoUpdateTime = schema .UnixSecond
50- }
5143 for i := range m .Fields {
5244 m .Fields [i ].Init ()
5345 }
@@ -68,20 +60,49 @@ func (m *Model) Default(data any) {
6860
6961// MakeModel make virtual model
7062func (m * Model ) MakeModel () any {
71- fieldTypes := make ([]reflect.StructField , 0 )
72- for i := range m .Fields {
73- fieldTypes = append (fieldTypes , m .Fields [i ].MakeField ())
74- }
75- return reflect .New (reflect .StructOf (fieldTypes )).Interface ()
63+ m .Init ()
64+ s := reflect .New (reflect .StructOf (m .MakeField ()))
65+ return s .Interface ()
7666}
7767
7868func (m * Model ) MakeList () any {
7969 m .Init ()
70+ return reflect .New (reflect .SliceOf (reflect .StructOf (m .MakeField ()))).Interface ()
71+ }
72+
73+ func (m * Model ) Migrate (db * gorm.DB ) error {
74+ return db .Table (m .TableName ()).AutoMigrate (m .MakeModel ())
75+ }
76+
77+ func (m * Model ) MakeField () []reflect.StructField {
8078 fieldTypes := make ([]reflect.StructField , 0 )
8179 for i := range m .Fields {
8280 fieldTypes = append (fieldTypes , m .Fields [i ].MakeField ())
8381 }
84- return reflect .New (reflect .SliceOf (reflect .StructOf (fieldTypes ))).Interface ()
82+ fieldTypes = append (fieldTypes , m .MakeTimeField ()... )
83+ return fieldTypes
84+ }
85+
86+ func (m * Model ) MakeTimeField () []reflect.StructField {
87+ fieldTypes := []reflect.StructField {
88+ {
89+ Name : "CreatedAt" ,
90+ Type : reflect .TypeOf (time.Time {}),
91+ Tag : "json:\" createdAt,omitempty\" " ,
92+ }, {
93+ Name : "UpdatedAt" ,
94+ Type : reflect .TypeOf (time.Time {}),
95+ Tag : "json:\" updatedAt,omitempty\" " ,
96+ },
97+ }
98+ if ! m .HardDeleted {
99+ fieldTypes = append (fieldTypes , reflect.StructField {
100+ Name : "DeletedAt" ,
101+ Type : reflect .TypeOf (gorm.DeletedAt {}),
102+ Tag : "json:\" deletedAt,omitempty\" gorm:\" index\" " ,
103+ })
104+ }
105+ return fieldTypes
85106}
86107
87108func (m * Model ) TableScope (db * gorm.DB ) * gorm.DB {
0 commit comments