mirror of
https://github.com/beego/bee.git
synced 2025-06-12 04:50:40 +00:00
Refactor!
create sub packages delete unused code delete code from not use command cmdRouter,cmdTest, cmdRundocs make command plugins check with gosimple,staticcheck,go vet,unused,unconvert
This commit is contained in:
203
cmd/commands/generate/generate.go
Normal file
203
cmd/commands/generate/generate.go
Normal file
@ -0,0 +1,203 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/beego/bee/cmd/commands"
|
||||
"github.com/beego/bee/cmd/commands/version"
|
||||
"github.com/beego/bee/config"
|
||||
"github.com/beego/bee/generate"
|
||||
"github.com/beego/bee/generate/swaggergen"
|
||||
beeLogger "github.com/beego/bee/logger"
|
||||
"github.com/beego/bee/utils"
|
||||
)
|
||||
|
||||
var CmdGenerate = &commands.Command{
|
||||
UsageLine: "generate [command]",
|
||||
Short: "Source code generator",
|
||||
Long: `▶ {{"To scaffold out your entire application:"|bold}}
|
||||
|
||||
$ bee generate scaffold [scaffoldname] [-fields="title:string,body:text"] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
|
||||
|
||||
▶ {{"To generate a Model based on fields:"|bold}}
|
||||
|
||||
$ bee generate model [modelname] [-fields="name:type"]
|
||||
|
||||
▶ {{"To generate a controller:"|bold}}
|
||||
|
||||
$ bee generate controller [controllerfile]
|
||||
|
||||
▶ {{"To generate a CRUD view:"|bold}}
|
||||
|
||||
$ bee generate view [viewpath]
|
||||
|
||||
▶ {{"To generate a migration file for making database schema updates:"|bold}}
|
||||
|
||||
$ bee generate migration [migrationfile] [-fields="name:type"]
|
||||
|
||||
▶ {{"To generate swagger doc file:"|bold}}
|
||||
|
||||
$ bee generate docs
|
||||
|
||||
▶ {{"To generate a test case:"|bold}}
|
||||
|
||||
$ bee generate test [routerfile]
|
||||
|
||||
▶ {{"To generate appcode based on an existing database:"|bold}}
|
||||
|
||||
$ bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
|
||||
`,
|
||||
PreRun: func(cmd *commands.Command, args []string) { version.ShowShortVersionBanner() },
|
||||
Run: GenerateCode,
|
||||
}
|
||||
|
||||
func init() {
|
||||
CmdGenerate.Flag.Var(&generate.Tables, "Tables", "List of table names separated by a comma.")
|
||||
CmdGenerate.Flag.Var(&generate.SQLDriver, "SQLDriver", "Database SQLDriver. Either mysql, postgres or sqlite.")
|
||||
CmdGenerate.Flag.Var(&generate.SQLConn, "SQLConn", "Connection string used by the SQLDriver to connect to a database instance.")
|
||||
CmdGenerate.Flag.Var(&generate.Level, "Level", "Either 1, 2 or 3. i.e. 1=models; 2=models and controllers; 3=models, controllers and routers.")
|
||||
CmdGenerate.Flag.Var(&generate.Fields, "Fields", "List of table Fields.")
|
||||
commands.AvailableCommands = append(commands.AvailableCommands, CmdGenerate)
|
||||
}
|
||||
|
||||
func GenerateCode(cmd *commands.Command, args []string) int {
|
||||
currpath, _ := os.Getwd()
|
||||
if len(args) < 1 {
|
||||
beeLogger.Log.Fatal("Command is missing")
|
||||
}
|
||||
|
||||
gps := utils.GetGOPATHs()
|
||||
if len(gps) == 0 {
|
||||
beeLogger.Log.Fatal("GOPATH environment variable is not set or empty")
|
||||
}
|
||||
|
||||
gopath := gps[0]
|
||||
|
||||
beeLogger.Log.Debugf("GOPATH: %s", utils.FILE(), utils.LINE(), gopath)
|
||||
|
||||
gcmd := args[0]
|
||||
switch gcmd {
|
||||
case "scaffold":
|
||||
scaffold(cmd, args, currpath)
|
||||
case "docs":
|
||||
swaggergen.GenerateDocs(currpath)
|
||||
case "appcode":
|
||||
appCode(cmd, args, currpath)
|
||||
case "migration":
|
||||
migration(cmd, args, currpath)
|
||||
case "controller":
|
||||
controller(args, currpath)
|
||||
case "model":
|
||||
model(cmd, args, currpath)
|
||||
case "view":
|
||||
view(args, currpath)
|
||||
default:
|
||||
beeLogger.Log.Fatal("Command is missing")
|
||||
}
|
||||
beeLogger.Log.Successf("%s successfully generated!", strings.Title(gcmd))
|
||||
return 0
|
||||
}
|
||||
|
||||
func scaffold(cmd *commands.Command, args []string, currpath string) {
|
||||
if len(args) < 2 {
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
|
||||
cmd.Flag.Parse(args[2:])
|
||||
if generate.SQLDriver == "" {
|
||||
generate.SQLDriver = utils.DocValue(config.Conf.Database.Driver)
|
||||
if generate.SQLDriver == "" {
|
||||
generate.SQLDriver = "mysql"
|
||||
}
|
||||
}
|
||||
if generate.SQLConn == "" {
|
||||
generate.SQLConn = utils.DocValue(config.Conf.Database.Conn)
|
||||
if generate.SQLConn == "" {
|
||||
generate.SQLConn = "root:@tcp(127.0.0.1:3306)/test"
|
||||
}
|
||||
}
|
||||
if generate.Fields == "" {
|
||||
beeLogger.Log.Hint("Fields option should not be empty, i.e. -Fields=\"title:string,body:text\"")
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
sname := args[1]
|
||||
generate.GenerateScaffold(sname, generate.Fields.String(), currpath, generate.SQLDriver.String(), generate.SQLConn.String())
|
||||
}
|
||||
|
||||
func appCode(cmd *commands.Command, args []string, currpath string) {
|
||||
cmd.Flag.Parse(args[1:])
|
||||
if generate.SQLDriver == "" {
|
||||
generate.SQLDriver = utils.DocValue(config.Conf.Database.Driver)
|
||||
if generate.SQLDriver == "" {
|
||||
generate.SQLDriver = "mysql"
|
||||
}
|
||||
}
|
||||
if generate.SQLConn == "" {
|
||||
generate.SQLConn = utils.DocValue(config.Conf.Database.Conn)
|
||||
if generate.SQLConn == "" {
|
||||
if generate.SQLDriver == "mysql" {
|
||||
generate.SQLConn = "root:@tcp(127.0.0.1:3306)/test"
|
||||
} else if generate.SQLDriver == "postgres" {
|
||||
generate.SQLConn = "postgres://postgres:postgres@127.0.0.1:5432/postgres"
|
||||
}
|
||||
}
|
||||
}
|
||||
if generate.Level == "" {
|
||||
generate.Level = "3"
|
||||
}
|
||||
beeLogger.Log.Infof("Using '%s' as 'SQLDriver'", generate.SQLDriver)
|
||||
beeLogger.Log.Infof("Using '%s' as 'SQLConn'", generate.SQLConn)
|
||||
beeLogger.Log.Infof("Using '%s' as 'Tables'", generate.Tables)
|
||||
beeLogger.Log.Infof("Using '%s' as 'Level'", generate.Level)
|
||||
generate.GenerateAppcode(generate.SQLDriver.String(), generate.SQLConn.String(), generate.Level.String(), generate.Tables.String(), currpath)
|
||||
}
|
||||
func migration(cmd *commands.Command, args []string, currpath string) {
|
||||
if len(args) < 2 {
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
cmd.Flag.Parse(args[2:])
|
||||
mname := args[1]
|
||||
|
||||
beeLogger.Log.Infof("Using '%s' as migration name", mname)
|
||||
|
||||
upsql := ""
|
||||
downsql := ""
|
||||
if generate.Fields != "" {
|
||||
dbMigrator := generate.NewDBDriver()
|
||||
upsql = dbMigrator.GenerateCreateUp(mname)
|
||||
downsql = dbMigrator.GenerateCreateDown(mname)
|
||||
}
|
||||
generate.GenerateMigration(mname, upsql, downsql, currpath)
|
||||
}
|
||||
|
||||
func controller(args []string, currpath string) {
|
||||
if len(args) == 2 {
|
||||
cname := args[1]
|
||||
generate.GenerateController(cname, currpath)
|
||||
} else {
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
}
|
||||
|
||||
func model(cmd *commands.Command, args []string, currpath string) {
|
||||
if len(args) < 2 {
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
cmd.Flag.Parse(args[2:])
|
||||
if generate.Fields == "" {
|
||||
beeLogger.Log.Hint("Fields option should not be empty, i.e. -Fields=\"title:string,body:text\"")
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
sname := args[1]
|
||||
generate.GenerateModel(sname, generate.Fields.String(), currpath)
|
||||
}
|
||||
|
||||
func view(args []string, currpath string) {
|
||||
if len(args) == 2 {
|
||||
cname := args[1]
|
||||
generate.GenerateView(cname, currpath)
|
||||
} else {
|
||||
beeLogger.Log.Fatal("Wrong number of arguments. Run: bee help generate")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user