Data model generator for postgres database.
This commit is contained in:
parent
92edc96c9a
commit
319c9f757d
9 changed files with 505 additions and 213 deletions
|
|
@ -1,91 +1,32 @@
|
|||
package generator
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/serenize/snaker"
|
||||
"go/format"
|
||||
"os"
|
||||
"github.com/sub0Zero/go-sqlbuilder/generator/metadata"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
func generateSqlBuilderModel(databaseName, schemaName string, tableInfo TableInfo, dirPath string) error {
|
||||
func generateSqlBuilderModel(databaseInfo *metadata.DatabaseInfo, dirPath string) error {
|
||||
modelDirPath := filepath.Join(dirPath, databaseInfo.DatabaseName, databaseInfo.SchemaName, "table")
|
||||
|
||||
schemaDirPath := filepath.Join(dirPath, databaseName, schemaName, "table")
|
||||
err := ensureDirPath(modelDirPath)
|
||||
|
||||
if _, err := os.Stat(schemaDirPath); os.IsNotExist(err) {
|
||||
err := os.MkdirAll(schemaDirPath, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, tableInfo := range databaseInfo.TableInfos {
|
||||
text, err := generateTemplate(SqlBuilderTableTemplate, tableInfo)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = saveGoFile(modelDirPath, tableInfo.Name+"_table", text)
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue