dto.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package orm
  2. import (
  3. "bytes"
  4. "fmt"
  5. "gitea.ckfah.com/go-script/logger"
  6. "go/format"
  7. "sync"
  8. "text/template"
  9. )
  10. const (
  11. defaultDtoPackageName = "dto"
  12. )
  13. type DtoMeta struct {
  14. TableName string
  15. TableField []FieldMeta
  16. }
  17. type DtoMetas struct {
  18. sync.Mutex
  19. packageName string
  20. dtos []DtoMeta
  21. }
  22. func NewDtoMeta(packageName string) *DtoMetas {
  23. if packageName == "" {
  24. packageName = defaultDtoPackageName
  25. }
  26. return &DtoMetas{
  27. packageName: packageName,
  28. dtos: []DtoMeta{},
  29. }
  30. }
  31. func (this *DtoMetas) Append(meta *ModelMeta) {
  32. this.Lock()
  33. defer this.Unlock()
  34. dtoMeta := DtoMeta{
  35. TableName: meta.TableName,
  36. TableField: meta.Fields,
  37. }
  38. this.dtos = append(this.dtos, dtoMeta)
  39. }
  40. func (this *DtoMetas) Run(tmpl *template.Template) ([]byte, error) {
  41. var buffer = &bytes.Buffer{}
  42. buffer.WriteString(fmt.Sprintf(`
  43. package %s
  44. `, this.packageName))
  45. for _, elem := range this.dtos {
  46. err := tmpl.Execute(buffer, &elem)
  47. if err != nil {
  48. return nil, err
  49. }
  50. }
  51. source, err := format.Source(buffer.Bytes())
  52. if err != nil {
  53. logger.ErrorF("[Run] err,table=%v,err=%v,body=\n%s\n", this.packageName, err, buffer.Bytes())
  54. return buffer.Bytes(), nil
  55. }
  56. return source, nil
  57. }