You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.2 KiB
85 lines
2.2 KiB
package main |
|
|
|
import ( |
|
_ "embed" |
|
"flag" |
|
"fmt" |
|
"git.diulo.com/mogfee/kit/cmd/mysql-kit/core" |
|
"git.diulo.com/mogfee/kit/core/pathx" |
|
"git.diulo.com/mogfee/kit/mysql/ddl" |
|
"os" |
|
"os/exec" |
|
"strings" |
|
) |
|
|
|
//go:embed template.tpl |
|
var templateContent string |
|
|
|
//go:embed custom.tpl |
|
var customContent string |
|
|
|
func main() { |
|
sqlFile := flag.String("f", "/Users/mogfee/web/sendmail_server_new/test_gozero.sql", "数据库创建mysqldump文件") |
|
savePath := flag.String("s", "./model", "数据库存储路径") |
|
flag.Parse() |
|
fmt.Println("sqlfile:", *sqlFile) |
|
fmt.Println("savePath:", *savePath) |
|
if *sqlFile == "" { |
|
return |
|
} |
|
os.MkdirAll(*savePath, os.ModePerm) |
|
|
|
if err := core.VarsFile(*savePath); err != nil { |
|
panic(err) |
|
} |
|
err := ddl.Parser(*sqlFile, func(table *ddl.Table) error { |
|
//table.Imports = append(table.Imports, "git.diulo.com/mogfee/kit/errors") |
|
//modelFileName := fmt.Sprintf("%s/%s_model_gen.go", strings.TrimRight(*savePath, "/"), table.Name) |
|
modelGenFile := fmt.Sprintf("%s/%smodel_gen.go", strings.TrimRight(*savePath, "/"), filename(table.Name)) |
|
modelFile := fmt.Sprintf("%s/%smodel.go", strings.TrimRight(*savePath, "/"), filename(table.Name)) |
|
table.Imports = append(table.Imports, "gorm.io/gorm") |
|
table.Imports = append(table.Imports, "context") |
|
|
|
table.Indexes = filterIndex(table.Indexes) |
|
|
|
if err := saveFile(modelGenFile, templateContent, table, false); err != nil { |
|
return err |
|
} |
|
|
|
if err := saveFile(modelFile, customContent, table, true); err != nil { |
|
return err |
|
} |
|
return nil |
|
}) |
|
if err != nil { |
|
panic(err) |
|
} |
|
|
|
exec.Command("gofmt", "-l", "-w", *savePath+"/..").Run() |
|
} |
|
func filename(tableName string) string { |
|
return strings.ToLower(strings.Join(strings.Split(tableName, "_"), "")) |
|
} |
|
func filterIndex(index []*ddl.TableIndex) []*ddl.TableIndex { |
|
idxs := make([]*ddl.TableIndex, 0) |
|
for _, v := range index { |
|
if v.IsUnique { |
|
idxs = append(idxs, v) |
|
} |
|
} |
|
return idxs |
|
} |
|
func saveFile(fileName string, templateContent string, table *ddl.Table, isOnce bool) error { |
|
if isOnce { |
|
if pathx.Exists(fileName) { |
|
return nil |
|
} |
|
} |
|
|
|
f, err := os.Create(fileName) |
|
if err != nil { |
|
return err |
|
} |
|
defer f.Close() |
|
return core.SaveFile(f, templateContent, table) |
|
}
|
|
|