package apigen import ( "errors" "fmt" "path/filepath" "strings" "text/template" "zero/tools/goctl/util" "github.com/logrusorgru/aurora" "github.com/urfave/cli" ) const apiTemplate = `info( title: // TODO: add title desc: // TODO: add description author: {{.gitUser}} email: {{.gitEmail}} ) type request struct{ // TODO: add members here and delete this comment } type response struct{ // TODO: add members here and delete this comment } @server( port: // TODO: add port here and delete this comment ) service {{.serviceName}} { @server( handler: // TODO: set handler name and delete this comment ) // TODO: edit the below line // get /users/id/:userId(request) returns(response) @server( handler: // TODO: set handler name and delete this comment ) // TODO: edit the below line // post /users/create(request) } ` func ApiCommand(c *cli.Context) error { apiFile := c.String("o") if len(apiFile) == 0 { return errors.New("missing -o") } fp, err := util.CreateIfNotExist(apiFile) if err != nil { return err } defer fp.Close() baseName := util.FileNameWithoutExt(filepath.Base(apiFile)) if strings.HasSuffix(strings.ToLower(baseName), "-api") { baseName = baseName[:len(baseName)-4] } else if strings.HasSuffix(strings.ToLower(baseName), "api") { baseName = baseName[:len(baseName)-3] } t := template.Must(template.New("etcTemplate").Parse(apiTemplate)) if err := t.Execute(fp, map[string]string{ "gitUser": getGitName(), "gitEmail": getGitEmail(), "serviceName": baseName + "-api", }); err != nil { return err } fmt.Println(aurora.Green("Done.")) return nil }