template.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package pkg
  2. import "text/template"
  3. // Make sure that the template compiles during package initialization
  4. func parseTemplateOrPanic(t string) *template.Template {
  5. tpl, err := template.New("output_template").Parse(t)
  6. if err != nil {
  7. panic(err)
  8. }
  9. return tpl
  10. }
  11. var outputTemplate = parseTemplateOrPanic(`
  12. ///////////////////////////////////////////////////////////
  13. // THIS FILE IS AUTO GENERATED by gormgen, DON'T EDIT IT //
  14. // ANY CHANGES DONE HERE WILL BE LOST //
  15. ///////////////////////////////////////////////////////////
  16. package {{.PkgName}}
  17. import (
  18. "fmt"
  19. "time"
  20. "github.com/xinliangnote/go-gin-api/internal/repository/mysql"
  21. "github.com/pkg/errors"
  22. "gorm.io/gorm"
  23. )
  24. func NewModel() *{{.StructName}} {
  25. return new({{.StructName}})
  26. }
  27. func NewQueryBuilder() *{{.QueryBuilderName}} {
  28. return new({{.QueryBuilderName}})
  29. }
  30. func (t *{{.StructName}}) Create(db *gorm.DB) (id int32, err error) {
  31. if err = db.Create(t).Error; err != nil {
  32. return 0, errors.Wrap(err, "create err")
  33. }
  34. return t.Id, nil
  35. }
  36. type {{.QueryBuilderName}} struct {
  37. order []string
  38. where []struct {
  39. prefix string
  40. value interface{}
  41. }
  42. limit int
  43. offset int
  44. }
  45. func (qb *{{.QueryBuilderName}}) buildQuery(db *gorm.DB) *gorm.DB {
  46. ret := db
  47. for _, where := range qb.where {
  48. ret = ret.Where(where.prefix, where.value)
  49. }
  50. for _, order := range qb.order {
  51. ret = ret.Order(order)
  52. }
  53. ret = ret.Limit(qb.limit).Offset(qb.offset)
  54. return ret
  55. }
  56. func (qb *{{.QueryBuilderName}}) Updates(db *gorm.DB, m map[string]interface{}) (err error) {
  57. db = db.Model(&{{.StructName}}{})
  58. for _, where := range qb.where {
  59. db.Where(where.prefix, where.value)
  60. }
  61. if err = db.Updates(m).Error; err != nil {
  62. return errors.Wrap(err, "updates err")
  63. }
  64. return nil
  65. }
  66. func (qb *{{.QueryBuilderName}}) Delete(db *gorm.DB) (err error) {
  67. for _, where := range qb.where {
  68. db = db.Where(where.prefix, where.value)
  69. }
  70. if err = db.Delete(&{{.StructName}}{}).Error; err != nil {
  71. return errors.Wrap(err, "delete err")
  72. }
  73. return nil
  74. }
  75. func (qb *{{.QueryBuilderName}}) Count(db *gorm.DB) (int64, error) {
  76. var c int64
  77. res := qb.buildQuery(db).Model(&{{.StructName}}{}).Count(&c)
  78. if res.Error != nil && res.Error == gorm.ErrRecordNotFound {
  79. c = 0
  80. }
  81. return c, res.Error
  82. }
  83. func (qb *{{.QueryBuilderName}}) First(db *gorm.DB) (*{{.StructName}}, error) {
  84. ret := &{{.StructName}}{}
  85. res := qb.buildQuery(db).First(ret)
  86. if res.Error != nil && res.Error == gorm.ErrRecordNotFound {
  87. ret = nil
  88. }
  89. return ret, res.Error
  90. }
  91. func (qb *{{.QueryBuilderName}}) QueryOne(db *gorm.DB) (*{{.StructName}}, error) {
  92. qb.limit = 1
  93. ret, err := qb.QueryAll(db)
  94. if len(ret) > 0 {
  95. return ret[0], err
  96. }
  97. return nil, err
  98. }
  99. func (qb *{{.QueryBuilderName}}) QueryAll(db *gorm.DB) ([]*{{.StructName}}, error) {
  100. var ret []*{{.StructName}}
  101. err := qb.buildQuery(db).Find(&ret).Error
  102. return ret, err
  103. }
  104. func (qb *{{.QueryBuilderName}}) Limit(limit int) *{{.QueryBuilderName}} {
  105. qb.limit = limit
  106. return qb
  107. }
  108. func (qb *{{.QueryBuilderName}}) Offset(offset int) *{{.QueryBuilderName}} {
  109. qb.offset = offset
  110. return qb
  111. }
  112. {{$queryBuilderName := .QueryBuilderName}}
  113. {{range .OptionFields}}
  114. func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}(p mysql.Predicate, value {{.FieldType}}) *{{$queryBuilderName}} {
  115. qb.where = append(qb.where, struct {
  116. prefix string
  117. value interface{}
  118. }{
  119. fmt.Sprintf("%v %v ?", "{{.ColumnName}}", p),
  120. value,
  121. })
  122. return qb
  123. }
  124. func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}In(value []{{.FieldType}}) *{{$queryBuilderName}} {
  125. qb.where = append(qb.where, struct {
  126. prefix string
  127. value interface{}
  128. }{
  129. fmt.Sprintf("%v %v ?", "{{.ColumnName}}", "IN"),
  130. value,
  131. })
  132. return qb
  133. }
  134. func (qb *{{$queryBuilderName}}) Where{{call $.Helpers.Titelize .FieldName}}NotIn(value []{{.FieldType}}) *{{$queryBuilderName}} {
  135. qb.where = append(qb.where, struct {
  136. prefix string
  137. value interface{}
  138. }{
  139. fmt.Sprintf("%v %v ?", "{{.ColumnName}}", "NOT IN"),
  140. value,
  141. })
  142. return qb
  143. }
  144. func (qb *{{$queryBuilderName}}) OrderBy{{call $.Helpers.Titelize .FieldName}}(asc bool) *{{$queryBuilderName}} {
  145. order := "DESC"
  146. if asc {
  147. order = "ASC"
  148. }
  149. qb.order = append(qb.order, "{{.ColumnName}} " + order)
  150. return qb
  151. }
  152. {{end}}
  153. `)