From c5e7fea37889c5839de6ab5b318834b3beea6e6d Mon Sep 17 00:00:00 2001 From: rogerwelin Date: Fri, 15 Nov 2019 13:45:51 +0100 Subject: [PATCH] cli & features fully implemented --- cli.go | 5 ++- new-api.go | 130 ++++++++++++++++++++++++++++++++--------------------- 2 files changed, 82 insertions(+), 53 deletions(-) diff --git a/cli.go b/cli.go index 3995906..9321a6d 100644 --- a/cli.go +++ b/cli.go @@ -42,7 +42,10 @@ func validateRun(c *cli.Context) error { Language: c.String("language"), } - fmt.Println(apiTmpl) + err := apiTmpl.bootstrapAPI() + if err != nil { + return err + } return nil } diff --git a/new-api.go b/new-api.go index cea22f2..6c65f2b 100644 --- a/new-api.go +++ b/new-api.go @@ -6,7 +6,7 @@ import ( ) var ( - defaultAppPath = "src/helloworld/app" + defaultAppPath = "/src/helloworld/app" allowedAPIProtocols = []string{"rest", "websocket"} allowedRestAPIEndpoints = []string{"regional", "edge", "private"} ) @@ -28,47 +28,53 @@ type LanguageMapper struct { DepsPath string } -var languages = map[string]LanguageMapper{ - "node": LanguageMapper{ - AppFile: "index.js", - DepsFile: "package.json", - TmplAppVar: nodeFunction, - TmplDepsVar: packageJson, - AppPath: defaultAppPath, - DepsPath: defaultAppPath, - }, - "java": LanguageMapper{ - AppFile: "App.java", - DepsFile: "pom.xml", - TmplAppVar: "", - TmplDepsVar: "", - AppPath: defaultAppPath + "/com/api", - DepsPath: defaultAppPath, - }, - "python": LanguageMapper{ - AppFile: "app.py", - DepsFile: "requirements.txt", - TmplAppVar: "", - TmplDepsVar: "", - AppPath: defaultAppPath, - DepsPath: defaultAppPath, - }, - "ruby": LanguageMapper{ - AppFile: "app.rb", - DepsFile: "Gemfile", - TmplAppVar: "", - TmplDepsVar: "", - AppPath: defaultAppPath, - DepsPath: defaultAppPath, - }, - "go": LanguageMapper{ - AppFile: "main.go", - DepsFile: "go.mod", - TmplAppVar: "", - TmplDepsVar: "", - AppPath: defaultAppPath, - DepsPath: defaultAppPath, - }, +func initMap(projectName string) map[string]LanguageMapper { + + appPath := projectName + defaultAppPath + + var languages = map[string]LanguageMapper{ + "node": LanguageMapper{ + AppFile: "index.js", + DepsFile: "package.json", + TmplAppVar: nodeFunction, + TmplDepsVar: packageJson, + AppPath: appPath, + DepsPath: appPath, + }, + "java": LanguageMapper{ + AppFile: "App.java", + DepsFile: "pom.xml", + TmplAppVar: "", + TmplDepsVar: "", + AppPath: appPath + "/com/api", + DepsPath: appPath, + }, + "python": LanguageMapper{ + AppFile: "app.py", + DepsFile: "requirements.txt", + TmplAppVar: "", + TmplDepsVar: "", + AppPath: appPath, + DepsPath: appPath, + }, + "ruby": LanguageMapper{ + AppFile: "app.rb", + DepsFile: "Gemfile", + TmplAppVar: "", + TmplDepsVar: "", + AppPath: appPath, + DepsPath: appPath, + }, + "go": LanguageMapper{ + AppFile: "main.go", + DepsFile: "go.mod", + TmplAppVar: "", + TmplDepsVar: "", + AppPath: appPath, + DepsPath: appPath, + }, + } + return languages } func createDir(path string) error { @@ -112,17 +118,11 @@ func (tmpl *TmplData) createFileFromTemplate(tmplVar string, path string, outNam var file *os.File var err error - if path != "" { - file, err = os.Create(path + "/" + outName) - if err != nil { - return err - } - } else { - file, err = os.Create(outName) - if err != nil { - return err - } + file, err = os.Create(path + "/" + outName) + if err != nil { + return err } + err = t.Execute(file, tmpl) if err != nil { return err @@ -130,6 +130,32 @@ func (tmpl *TmplData) createFileFromTemplate(tmplVar string, path string, outNam return nil } +func (tmpl *TmplData) bootstrapAPI() error { + + // create top dir + createDir(tmpl.ApiProjectName) + + // create apigw sam/cf + err := tmpl.createFileFromTemplate(apiGWConf, tmpl.ApiProjectName, "apigw.yml") + if err != nil { + panic(err) + } + + // create swagger file + err = tmpl.createFileFromTemplate(swagger, tmpl.ApiProjectName, "swagger-api.yml") + if err != nil { + return err + } + + languageMap := initMap(tmpl.ApiProjectName) + + err = createFileFromStruct(languageMap[tmpl.Language]) + if err != nil { + return err + } + return nil +} + /*func main() { apiTmpl := &TmplData{