1 Star 0 Fork 0

vizee/mybg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
dao.go 2.92 KB
一键复制 编辑 原始数据 按行查看 历史
vizee 提交于 1个月前 . feat: improvements
package main
import (
"encoding/json"
"os"
"path/filepath"
"slices"
"strings"
"sync"
"github.com/spf13/cobra"
)
type DaoOptions struct {
common CommonOptions
pkgName string
dump bool
}
type DaoDocument struct {
PkgName string
Imports []string
DaoName string
ModelName string
Table *TableDesc
Vars map[string]any
}
var (
daoConfig *DaoConfig
)
var initDaoConfig = sync.OnceFunc(func() {
initCommonConfig()
daoConfig = getAppConfig().Dao
})
func getDaoTemplate() string {
var templateName string
if getAppConfig().Dao != nil {
templateName = getAppConfig().Dao.TemplateName
}
if templateName == "" {
templateName = "gorm_dao"
}
return templateName
}
func generateDao(tableName string, opts *DaoOptions) error {
imports := make(map[string]bool)
for _, path := range daoConfig.Imports {
imports[path] = true
}
baseName := camelCase(removePrefix(tablePrefixes, tableName), false)
daoName := strings.Replace(daoConfig.DaoName, "{base}", baseName, 1)
modelType := parseGoType(strings.Replace(daoConfig.ModelName, "{base}", baseName, 1))
if daoConfig.ImportModel && modelType.PkgPath != "" {
imports[modelType.PkgPath] = true
}
tableDesc, err := getTableDesc(tableName, false)
if err != nil {
return err
}
var importList []string
for k := range imports {
importList = append(importList, k)
}
slices.Sort(importList)
doc := &DaoDocument{
PkgName: opts.pkgName,
Imports: importList,
ModelName: modelType.Name,
Vars: daoConfig.Vars,
DaoName: daoName,
Table: tableDesc,
}
if opts.dump {
enc := json.NewEncoder(os.Stdout)
enc.SetEscapeHTML(false)
enc.SetIndent("", " ")
return enc.Encode(doc)
}
return writeOutput(filepath.ToSlash(getDaoTemplate()), doc, tableName, &opts.common)
}
func daoCommand() *cobra.Command {
opts := &DaoOptions{}
cmd := &cobra.Command{
Use: "dao [flags] <table>...",
Args: cobra.MinimumNArgs(1),
Aliases: []string{"d"},
PreRun: func(cmd *cobra.Command, args []string) {
initDaoConfig()
if opts.pkgName == "" {
wd, _ := os.Getwd()
wd, _ = filepath.Abs(wd)
opts.pkgName = filepath.Base(wd)
}
if !isValidPkgName(opts.pkgName) {
fatalf("invalid package name: %s\n", opts.pkgName)
}
err := tryLoadTemplateFile(getDaoTemplate())
if err != nil {
fatalf("load template file: %v\n", err)
}
},
Run: func(cmd *cobra.Command, args []string) {
for _, table := range args {
err := generateDao(table, opts)
if err != nil {
fatalf("generate dao: %v\n", err)
}
}
},
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
tbls, _ := showTables(toComplete)
return tbls, cobra.ShellCompDirectiveNoFileComp
},
}
opts.common.AddFlags(cmd)
cmd.Flags().StringVarP(&opts.pkgName, "package", "p", "", "specify package name")
cmd.Flags().BoolVar(&opts.dump, "dump", false, "dump document")
return cmd
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/viz/mybg.git
git@gitee.com:viz/mybg.git
viz
mybg
mybg
v0.1.4

搜索帮助