From 91c467505afc7b7ba8b5ba24882f7ac1f0e60f05 Mon Sep 17 00:00:00 2001 From: miraclesu Date: Mon, 8 Jul 2013 15:34:58 +0800 Subject: [PATCH] add api command --- apiapp.go | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 1 + 2 files changed, 167 insertions(+) create mode 100644 apiapp.go diff --git a/apiapp.go b/apiapp.go new file mode 100644 index 0000000..1a44874 --- /dev/null +++ b/apiapp.go @@ -0,0 +1,166 @@ +package main + +import ( + "fmt" + "os" + path "path/filepath" + "strings" +) + +var cmdApiapp = &Command{ + // CustomFlags: true, + UsageLine: "api [appname]", + Short: "create an api application base on beego framework", + Long: ` +create an api application base on beego framework + +In the current path, will create a folder named [appname] + +In the appname folder has the follow struct: + + ├── conf + │   └── app.conf + ├── controllers + │   └── default.go + ├── main.go + └── models + └── default.go + +`, +} + +var apiconf = ` +appname = {{.Appname}} +httpport = 8080 +runmode = dev +autorender = false +` +var apiMaingo = `package main + +import ( + "{{.Appname}}/controllers" + "github.com/astaxie/beego" +) + +func main() { + beego.Router("/", &controllers.MainController{}) + beego.Run() +} +` +var apiModels = `package models + +type User struct { + Name string + Email string +} + +func (this *User) All() (users []User, err error) { + // get all users from DB + // users, err = queryAll() + users = append([]User{}, User{"astaxie", "astaxie@gmail.com"}) + return +} +` + +var apiControllers = `package controllers + +import ( + "{{.Appname}}/models" + "github.com/astaxie/beego" +) + +type MainController struct { + beego.Controller +} + +func (this *MainController) Get() { + var user models.User + users, err := user.All() + if err != nil { + this.Data["json"] = err + } else { + this.Data["json"] = users + } + this.ServeJson() +} +` + +func init() { + cmdApiapp.Run = createapi +} + +func createapi(cmd *Command, args []string) { + if len(args) != 1 { + fmt.Println("error args") + os.Exit(2) + } + apppath, packpath, err := checkEnv(args[0]) + if err != nil { + fmt.Println(err) + os.Exit(2) + } + os.MkdirAll(apppath, 0755) + fmt.Println("create app folder:", apppath) + os.Mkdir(path.Join(apppath, "conf"), 0755) + fmt.Println("create conf:", path.Join(apppath, "conf")) + os.Mkdir(path.Join(apppath, "controllers"), 0755) + fmt.Println("create controllers:", path.Join(apppath, "controllers")) + os.Mkdir(path.Join(apppath, "models"), 0755) + fmt.Println("create models:", path.Join(apppath, "models")) + + fmt.Println("create conf app.conf:", path.Join(apppath, "conf", "app.conf")) + writetofile(path.Join(apppath, "conf", "app.conf"), + strings.Replace(apiconf, "{{.Appname}}", args[0], -1)) + + fmt.Println("create controllers default.go:", path.Join(apppath, "controllers", "default.go")) + writetofile(path.Join(apppath, "controllers", "default.go"), + strings.Replace(apiControllers, "{{.Appname}}", packpath, -1)) + + fmt.Println("create models default.go:", path.Join(apppath, "models", "default.go")) + writetofile(path.Join(apppath, "models", "default.go"), apiModels) + + fmt.Println("create main.go:", path.Join(apppath, "main.go")) + writetofile(path.Join(apppath, "main.go"), + strings.Replace(apiMaingo, "{{.Appname}}", packpath, -1)) +} + +func checkEnv(appname string) (apppath, packpath string, err error) { + curpath, err := os.Getwd() + if err != nil { + return + } + + gopath := os.Getenv("GOPATH") + Debugf("gopath:%s", gopath) + if gopath == "" { + err = fmt.Errorf("you should set GOPATH in the env") + return + } + + appsrcpath := "" + haspath := false + wgopath := path.SplitList(gopath) + for _, wg := range wgopath { + wg = path.Join(wg, "src") + + if path.HasPrefix(strings.ToLower(curpath), strings.ToLower(wg)) { + haspath = true + appsrcpath = wg + break + } + } + + if !haspath { + err = fmt.Errorf("can't create application outside of GOPATH `%s`\n"+ + "you first should `cd $GOPATH%ssrc` then use create\n", gopath, string(path.Separator)) + return + } + apppath = path.Join(curpath, appname) + + if _, e := os.Stat(apppath); os.IsNotExist(e) == false { + err = fmt.Errorf("path `%s` exists, can not create app without remove it\n", apppath) + return + } + packpath = strings.Join(strings.Split(apppath[len(appsrcpath)+1:], string(path.Separator)), "/") + return +} diff --git a/main.go b/main.go index 3749707..6a479f6 100644 --- a/main.go +++ b/main.go @@ -59,6 +59,7 @@ var commands = []*Command{ cmdCreate, cmdStart, cmdPack, + cmdApiapp, //cmdReStart, }