From 95ec33c3712e49b1f15285bd1864262d78ec2b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=B0=8F=E5=86=9B?= <346944475@qq.com> Date: Mon, 16 Dec 2019 19:24:40 +0800 Subject: [PATCH] add func base template --- data/view/genfunc/gen.base.go | 28 +++++----- data/view/genfunc/gen.logic.go | 96 ++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 12 deletions(-) create mode 100644 data/view/genfunc/gen.logic.go diff --git a/data/view/genfunc/gen.base.go b/data/view/genfunc/gen.base.go index b1689ca..098d6e5 100644 --- a/data/view/genfunc/gen.base.go +++ b/data/view/genfunc/gen.base.go @@ -2,11 +2,11 @@ package genfunc import ( "context" - "fmt" "github.com/jinzhu/gorm" ) +// prepare for outher type _BaseMgr struct { *gorm.DB ctx *context.Context @@ -17,18 +17,22 @@ func (obj *_BaseMgr) SetCtx(c *context.Context) { obj.ctx = c } -////////////////////////////////////////////logic - -type _ExampleMgr struct { - *_BaseMgr +// GetDB get gorm.DB info +func (obj *_BaseMgr) GetDB() *gorm.DB { + return obj.DB } -// ExampleMgr open func -func ExampleMgr(db *gorm.DB) *_ExampleMgr { - if db == nil { - panic(fmt.Errorf("ExampleMgr init need db")) - } - return &_ExampleMgr{_BaseMgr: &_BaseMgr{DB: db}} +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 new file mode 100644 index 0000000..f19bfab --- /dev/null +++ b/data/view/genfunc/gen.logic.go @@ -0,0 +1,96 @@ +package genfunc + +import ( + "fmt" + + "github.com/jinzhu/gorm" +) + +// Example demo of root +type Example struct { + ID int `json:"-"` + UserID int `json:"userId"` + UserList []User `gorm:"association_foreignkey:userId;foreignkey:job" json:"user_list"` +} + +// User demo of user +type User struct { + UserID int `json:"userId"` + Job int `json:"job"` +} + +////////////////////////////////////////////-----logic------ + +type _ExampleMgr struct { + *_BaseMgr +} + +// ExampleMgr open func +func ExampleMgr(db *gorm.DB) *_ExampleMgr { + if db == nil { + panic(fmt.Errorf("ExampleMgr init need db")) + } + return &_ExampleMgr{_BaseMgr: &_BaseMgr{DB: db}} +} + +// 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 { + + } + return +} + +// GetByPrimaryKey 唯一主键查找 +func (obj *_ExampleMgr) GetByPrimaryKey(id int64) (Example, error) { + var tmp Example + err := obj.DB.Table("example").Where("id = ?", id).Find(&tmp).Error + return tmp, err +} + +// GetByPrimaryKey 批量唯一主键查找 +func (obj *_ExampleMgr) GetByPrimaryKeys(ids []int64) ([]*Example, error) { + var tmp []*Example + err := obj.DB.Table("example").Where("id", ids).Find(&tmp).Error + return tmp, err +} + +//////////////////////////option case //////////////////////////////////////////// + +// GetByPrimaryKey 功能选项模式获取 +func (obj *_ExampleMgr) GetByOption(opts ...Option) (Example, error) { + options := options{ + query: make(map[string]interface{}, len(opts)), + } + for _, o := range opts { + o.apply(&options) + } + + var tmp Example + err := obj.DB.Table("example").Where(options.query).Find(&tmp).Error + return tmp, err +} + +// GetByPrimaryKey 批量功能选项模式获取 +func (obj *_ExampleMgr) GetByOptions(opts ...Option) ([]*Example, error) { + options := options{ + query: make(map[string]interface{}, len(opts)), + } + for _, o := range opts { + o.apply(&options) + } + + var tmp []*Example + err := obj.DB.Table("example").Where(options.query).Find(&tmp).Error + return tmp, err +} + +// WithID id获取 +func (obj *_ExampleMgr) WithID(id string) Option { + return optionFunc(func(o *options) { + o.query["id"] = id + }) +} + +///////////////////////////////////////////////////