diff --git a/data/view/genfunc/def.go b/data/view/genfunc/def.go new file mode 100644 index 0000000..7e3a6e1 --- /dev/null +++ b/data/view/genfunc/def.go @@ -0,0 +1,49 @@ +package genfunc + +const ( + genBase = ` +package {{.PackageName}} +import ( + "context" + + "github.com/jinzhu/gorm" +) + +// prepare for outher +type _BaseMgr struct { + *gorm.DB + ctx *context.Context + isRelated bool +} + +// SetCtx set context +func (obj *_BaseMgr) SetCtx(c *context.Context) { + obj.ctx = c +} + +// GetDB get gorm.DB info +func (obj *_BaseMgr) GetDB() *gorm.DB { + return obj.DB +} + +// IsRelated Query foreign key Association.是否查询外键关联(gorm.Related) +func (obj *_BaseMgr) IsRelated(b bool) { + obj.isRelated = b +} + +type options struct { + query map[string]interface{} +} + +// Option overrides behavior of Connect. +type Option interface { + apply(*options) +} + +type optionFunc func(*options) + +func (f optionFunc) apply(o *options) { + f(o) +} + ` +) diff --git a/data/view/genfunc/gen.logic.go b/data/view/genfunc/gen.logic.go index c0e2524..8e6ada9 100644 --- a/data/view/genfunc/gen.logic.go +++ b/data/view/genfunc/gen.logic.go @@ -33,10 +33,15 @@ func ExampleMgr(db *gorm.DB) *_ExampleMgr { return &_ExampleMgr{_BaseMgr: &_BaseMgr{DB: db}} } +// GetTableName get sql table name.获取数据库名字 +func (obj *_ExampleMgr) GetTableName() string { + return "example" +} + // GetFromID 通过id获取内容 func (obj *_ExampleMgr) GetFromID(id int) (results []*Example, err error) { - err = obj.DB.Table("example").Where("id = ?", id).Find(&results).Error - if err == nil { + err = obj.DB.Table(obj.GetTableName()).Where("id = ?", id).Find(&results).Error + if err == nil && obj.isRelated { for i := 0; i < len(results); i++ { var userList []User err = obj.DB.Where("job = ?", results[i].UserID).Find(&userList).Error @@ -51,8 +56,8 @@ func (obj *_ExampleMgr) GetFromID(id int) (results []*Example, err error) { // GetByPrimaryKey 唯一主键查找 func (obj *_ExampleMgr) GetByPrimaryKey(id int64) (result Example, err error) { - err = obj.DB.Table("example").Where("id = ?", id).Find(&result).Error - if err == nil { + err = obj.DB.Table(obj.GetTableName()).Where("id = ?", id).Find(&result).Error + if err == nil && obj.isRelated { var info []User err = obj.DB.Where("job = ?", result.UserID).Find(&info).Error if err != nil { @@ -65,8 +70,8 @@ func (obj *_ExampleMgr) GetByPrimaryKey(id int64) (result Example, err error) { // GetByPrimaryKey 批量唯一主键查找 func (obj *_ExampleMgr) GetByPrimaryKeys(ids []int64) (results []*Example, err error) { - err = obj.DB.Table("example").Where("id IN (?)", ids).Find(&results).Error - if err == nil { + err = obj.DB.Table(obj.GetTableName()).Where("id IN (?)", ids).Find(&results).Error + if err == nil && obj.isRelated { for i := 0; i < len(results); i++ { var userList []User err = obj.DB.Where("job = ?", results[i].UserID).Find(&userList).Error @@ -90,8 +95,8 @@ func (obj *_ExampleMgr) GetByOption(opts ...Option) (result Example, err error) o.apply(&options) } - err = obj.DB.Table("example").Where(options.query).Find(&result).Error - if err == nil { + err = obj.DB.Table(obj.GetTableName()).Where(options.query).Find(&result).Error + if err == nil && obj.isRelated { var info []User err = obj.DB.Where("job = ?", result.UserID).Find(&info).Error if err != nil { @@ -111,8 +116,8 @@ func (obj *_ExampleMgr) GetByOptions(opts ...Option) (results []*Example, err er o.apply(&options) } - err = obj.DB.Table("example").Where(options.query).Find(&results).Error - if err == nil { + err = obj.DB.Table(obj.GetTableName()).Where(options.query).Find(&results).Error + if err == nil && obj.isRelated { for i := 0; i < len(results); i++ { var userList []User err = obj.DB.Where("job = ?", results[i].UserID).Find(&userList).Error diff --git a/data/view/genfunc/genfunc.go b/data/view/genfunc/genfunc.go index fbde9db..0b7b416 100644 --- a/data/view/genfunc/genfunc.go +++ b/data/view/genfunc/genfunc.go @@ -1 +1,11 @@ package genfunc + +// GetGenBaseTemp get gen base template str +func GetGenBaseTemp() string { + return genBase +} + +// GetGenLogicTemp get gen logic template str +func GetGenLogicTemp() string { + return "" +} diff --git a/data/view/genstruct/common.go b/data/view/genstruct/common.go index 6d3bf19..f82d735 100644 --- a/data/view/genstruct/common.go +++ b/data/view/genstruct/common.go @@ -76,17 +76,19 @@ func (s *GenStruct) SetStructName(name string) { // SetNotes set the notes.设置注释 func (s *GenStruct) SetNotes(notes string) { - if len(notes) > 0 { - notes = s.Name + " " + notes + if len(notes) == 0 { + notes = "[...]" // default of struct notes(for export ).struct 默认注释(为了导出注释) } + notes = s.Name + " " + notes + a := strings.Split(notes, "\n") var text []string for _, v := range a { - if len(v) > 0 { - text = append(text, "// "+v) - } + // if len(v) > 0 { + text = append(text, "// "+v) + // } } s.Notes = strings.Join(text, "\r\n") } @@ -159,6 +161,12 @@ func (p *GenPackage) Generate() string { } // -----------end + // add func + for _, v := range p.FuncStrList { + pa.Add(v) + } + // -----------end + // output.输出 strOut := "" for _, v := range pa.Generates() { diff --git a/data/view/genstruct/def.go b/data/view/genstruct/def.go index 66dc294..5ecc8e9 100644 --- a/data/view/genstruct/def.go +++ b/data/view/genstruct/def.go @@ -18,7 +18,8 @@ type GenStruct struct { // GenPackage package of IPackage.包体 type GenPackage struct { - Name string // name.名字 - Imports map[string]string // Inclusion term.元素组合 - Structs []GenStruct // struct list .结构体组合 + Name string // name.名字 + Imports map[string]string // Inclusion term.元素组合 + Structs []GenStruct // struct list .结构体组合 + FuncStrList []string // func of template on string. 函数的最终定义 } diff --git a/data/view/model/model.go b/data/view/model/model.go index 7e945fc..d00e2ca 100644 --- a/data/view/model/model.go +++ b/data/view/model/model.go @@ -1,11 +1,15 @@ package model import ( + "bytes" + "fmt" "strings" + "text/template" "github.com/xxjwxc/public/mybigcamel" "github.com/xxjwxc/gormt/data/config" + "github.com/xxjwxc/gormt/data/view/genfunc" "github.com/xxjwxc/gormt/data/view/genstruct" ) @@ -27,6 +31,7 @@ func Generate(info DBInfo) (out []GenOutInfo) { // ------end // gen function + out = append(out, m.generateFunc()...) // -------------- end return } @@ -180,6 +185,37 @@ func (m *_Model) getColumusKeyMulti(tableName, col string) (isMulti bool, isFind } // ///////////////////////// func -func (m *_Model) generateFunc() { +func (m *_Model) generateFunc() (genOut []GenOutInfo) { + // getn base + tmpl, err := template.New("gen_base").Parse(genfunc.GetGenBaseTemp()) + if err != nil { + panic(err) + } + var buf bytes.Buffer + tmpl.Execute(&buf, m.info) + genOut = append(genOut, GenOutInfo{ + FileName: "gen.base.go", + FileCtx: buf.String(), + }) + //tools.WriteFile(outDir+"gen_router.go", []string{buf.String()}, true) + // -------end------ + for _, tab := range m.info.TabList { + var pkg genstruct.GenPackage + pkg.SetPackage(m.info.PackageName) //package name + + // tmpl, err := template.New("gen_logic").Funcs(template.FuncMap{"GetStringList": GetStringList}).Parse(genfunc.GetGenBaseTemp()) + // if err != nil { + // panic(err) + // } + // var buf bytes.Buffer + // tmpl.Execute(&buf, m.info) + + genOut = append(genOut, GenOutInfo{ + FileName: fmt.Sprintf("gen.%v.go", tab.Name), + FileCtx: pkg.Generate(), + }) + } + + return }