123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- package pkg
- import "text/template"
- // Make sure that the template compiles during package initialization
- func parseTemplateOrPanic(t string) *template.Template {
- tpl, err := template.New("output_template").Parse(t)
- if err != nil {
- panic(err)
- }
- return tpl
- }
- var outputTemplate = parseTemplateOrPanic(`
- ///////////////////////////////////////////////////////////
- // THIS FILE IS AUTO GENERATED by gormgen, DON'T EDIT IT //
- // ANY CHANGES DONE HERE WILL BE LOST //
- ///////////////////////////////////////////////////////////
- package {{.PkgName}}
- import (
- "fmt"
- "time"
- "github.com/xinliangnote/go-gin-api/internal/repository/mysql"
- "github.com/pkg/errors"
- "gorm.io/gorm"
- )
- func NewModel() *{{.StructName}} {
- return new({{.StructName}})
- }
- func NewQueryBuilder() *{{.QueryBuilderName}} {
- return new({{.QueryBuilderName}})
- }
- func (t *{{.StructName}}) Create(db *gorm.DB) (id int32, err error) {
- if err = db.Create(t).Error; err != nil {
- return 0, errors.Wrap(err, "create err")
- }
- return t.Id, nil
- }
- type {{.QueryBuilderName}} struct {
- order []string
- where []struct {
- prefix string
- value interface{}
- }
- limit int
- offset int
- }
- func (qb *{{.QueryBuilderName}}) buildQuery(db *gorm.DB) *gorm.DB {
- ret := db
- for _, where := range qb.where {
- ret = ret.Where(where.prefix, where.value)
- }
- for _, order := range qb.order {
- ret = ret.Order(order)
- }
- ret = ret.Limit(qb.limit).Offset(qb.offset)
- return ret
- }
- func (qb *{{.QueryBuilderName}}) Updates(db *gorm.DB, m map[string]interface{}) (err error) {
- db = db.Model(&{{.StructName}}{})
- for _, where := range qb.where {
- db.Where(where.prefix, where.value)
- }
- if err = db.Updates(m).Error; err != nil {
- return errors.Wrap(err, "updates err")
- }
- return nil
- }
- func (qb *{{.QueryBuilderName}}) Delete(db *gorm.DB) (err error) {
- for _, where := range qb.where {
- db = db.Where(where.prefix, where.value)
- }
- if err = db.Delete(&{{.StructName}}{}).Error; err != nil {
- return errors.Wrap(err, "delete err")
- }
- return nil
- }
- func (qb *{{.QueryBuilderName}}) Count(db *gorm.DB) (int64, error) {
- var c int64
- res := qb.buildQuery(db).Model(&{{.StructName}}{}).Count(&c)
- if res.Error != nil && res.Error == gorm.ErrRecordNotFound {
- c = 0
- }
- return c, res.Error
- }
- func (qb *{{.QueryBuilderName}}) First(db *gorm.DB) (*{{.StructName}}, error) {
- ret := &{{.StructName}}{}
- res := qb.buildQuery(db).First(ret)
- if res.Error != nil && res.Error == gorm.ErrRecordNotFound {
- ret = nil
- }
- return ret, res.Error
- }
- func (qb *{{.QueryBuilderName}}) QueryOne(db *gorm.DB) (*{{.StructName}}, error) {
- qb.limit = 1
- ret, err := qb.QueryAll(db)
- if len(ret) > 0 {
- return ret[0], err
- }
- return nil, err
- }
- func (qb *{{.QueryBuilderName}}) QueryAll(db *gorm.DB) ([]*{{.StructName}}, error) {
- var ret []*{{.StructName}}
- err := qb.buildQuery(db).Find(&ret).Error
- return ret, err
- }
- func (qb *{{.QueryBuilderName}}) Limit(limit int) *{{.QueryBuilderName}} {
- qb.limit = limit
- return qb
- }
- func (qb *{{.QueryBuilderName}}) Offset(offset int) *{{.QueryBuilderName}} {
- qb.offset = offset
- return qb
- }
- {{$queryBuilderName := .QueryBuilderName}}
- {{range .OptionFields}}
- func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}(p mysql.Predicate, value {{.FieldType}}) *{{$queryBuilderName}} {
- qb.where = append(qb.where, struct {
- prefix string
- value interface{}
- }{
- fmt.Sprintf("%v %v ?", "{{.ColumnName}}", p),
- value,
- })
- return qb
- }
- func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}In(value []{{.FieldType}}) *{{$queryBuilderName}} {
- qb.where = append(qb.where, struct {
- prefix string
- value interface{}
- }{
- fmt.Sprintf("%v %v ?", "{{.ColumnName}}", "IN"),
- value,
- })
- return qb
- }
- func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}NotIn(value []{{.FieldType}}) *{{$queryBuilderName}} {
- qb.where = append(qb.where, struct {
- prefix string
- value interface{}
- }{
- fmt.Sprintf("%v %v ?", "{{.ColumnName}}", "NOT IN"),
- value,
- })
- return qb
- }
- func (qb *{{$queryBuilderName}}) OrderBy{{call $.Helpers.Titelize .FieldName}}(asc bool) *{{$queryBuilderName}} {
- order := "DESC"
- if asc {
- order = "ASC"
- }
- qb.order = append(qb.order, "{{.ColumnName}} " + order)
- return qb
- }
- {{end}}
- `)
|