91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
package generator
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/serenize/snaker"
|
|
"go/format"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
func generateSqlBuilderModel(databaseName, schemaName string, tableInfo TableInfo, dirPath string) error {
|
|
|
|
schemaDirPath := filepath.Join(dirPath, databaseName, schemaName, "table")
|
|
|
|
if _, err := os.Stat(schemaDirPath); os.IsNotExist(err) {
|
|
err := os.MkdirAll(schemaDirPath, os.ModePerm)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
t, err := template.New("TableTemplate").Funcs(template.FuncMap{
|
|
"camelize": func(txt string) string {
|
|
return snaker.SnakeToCamel(txt)
|
|
},
|
|
"columnName": columnName,
|
|
}).Parse(TableTemplate)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newGoFilePath := filepath.Join(schemaDirPath, tableInfo.Name) + ".go"
|
|
|
|
file, err := os.Create(newGoFilePath)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer file.Close()
|
|
|
|
tableTemplate := TableTemplateData{
|
|
databaseName,
|
|
tableInfo,
|
|
}
|
|
|
|
//err = t.Execute(file, &tableTemplate)
|
|
//
|
|
//if err != nil {
|
|
// return err
|
|
//}
|
|
|
|
var buf bytes.Buffer
|
|
if err := t.Execute(&buf, &tableTemplate); err != nil {
|
|
return err
|
|
}
|
|
p, err := format.Source(buf.Bytes())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = file.Write(p)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type TableTemplateData struct {
|
|
PackageName string
|
|
TableInfo TableInfo
|
|
}
|
|
|
|
func columnName(table, column string) string {
|
|
return snaker.SnakeToCamelLower(table) + snaker.SnakeToCamel(column) + "Column"
|
|
}
|
|
|
|
func (t *TableTemplateData) ColumnNameList(sep string) string {
|
|
columnNames := []string{}
|
|
for _, columnInfo := range t.TableInfo.Columns {
|
|
columnInfoName := columnInfo.Name
|
|
columnNames = append(columnNames, columnName(t.TableInfo.Name, columnInfoName))
|
|
}
|
|
return strings.Join(columnNames, sep)
|
|
}
|