package orm import ( "bytes" "fmt" "gitea.ckfah.com/go-script/logger" "go/format" "sync" "text/template" ) const ( defaultDtoPackageName = "dto" ) type DtoMeta struct { TableName string TableField []FieldMeta } type DtoMetas struct { sync.Mutex packageName string dtos []DtoMeta } func NewDtoMeta(packageName string) *DtoMetas { if packageName == "" { packageName = defaultDtoPackageName } return &DtoMetas{ packageName: packageName, dtos: []DtoMeta{}, } } func (this *DtoMetas) Append(meta *ModelMeta) { this.Lock() defer this.Unlock() dtoMeta := DtoMeta{ TableName: meta.TableName, TableField: meta.Fields, } this.dtos = append(this.dtos, dtoMeta) } func (this *DtoMetas) Run(tmpl *template.Template) ([]byte, error) { var buffer = &bytes.Buffer{} buffer.WriteString(fmt.Sprintf(` package %s `, this.packageName)) for _, elem := range this.dtos { err := tmpl.Execute(buffer, &elem) if err != nil { return nil, err } } source, err := format.Source(buffer.Bytes()) if err != nil { logger.ErrorF("[Run] err,table=%v,err=%v,body=\n%s\n", this.packageName, err, buffer.Bytes()) return buffer.Bytes(), nil } return source, nil }