feat(api): Implement API generator with stratoscale for go swagger
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
3d878c050d
commit
d997c0035d
@ -5,12 +5,16 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"git.dev.m-and-m.ovh/mderasse/gouick/helpers/api_types"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// apiCmd represents the api command.
|
// apiCmd represents the api command.
|
||||||
var apiCmd = &cobra.Command{
|
var apiCmd = &cobra.Command{
|
||||||
Use: "api",
|
Use: "api",
|
||||||
Short: "Generate Go-Swagger Files and Controllers",
|
Short: "Generate API Files and Controllers",
|
||||||
Run: runGenerateAPI,
|
Run: runGenerateAPI,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,4 +24,25 @@ func init() {
|
|||||||
|
|
||||||
// runGenerateAPI will generate api files such as controllers, server, unit test, ... for the current project.
|
// runGenerateAPI will generate api files such as controllers, server, unit test, ... for the current project.
|
||||||
func runGenerateAPI(cmd *cobra.Command, args []string) {
|
func runGenerateAPI(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
|
log.Debugf("Starting command GenerateAPI")
|
||||||
|
|
||||||
|
currentPath, config, err := loadProjectAndConfig()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apiType, err := api_types.GetAPIType(config.ProjectType)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Impossible to load that API Type generator")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate Dockerfile
|
||||||
|
log.Info("Generating API")
|
||||||
|
err = apiType.GenerateAPI(currentPath, config)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Fail to generate API Files. The following error happen: %s", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
13
helpers/api_types/base/generate_api.go
Normal file
13
helpers/api_types/base/generate_api.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package base
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/juju/errors"
|
||||||
|
|
||||||
|
"git.dev.m-and-m.ovh/mderasse/gouick/helpers"
|
||||||
|
"git.dev.m-and-m.ovh/mderasse/gouick/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateAPI will generate api files such as server, controllers, test, ....
|
||||||
|
func (a APIType) GenerateAPI(path string, config *models.Config) error {
|
||||||
|
return errors.NotImplementedf("%s not implemented for %s", helpers.GetCurrentFuncName(), a.GetName())
|
||||||
|
}
|
31
helpers/api_types/go_swagger/generate_api.go
Normal file
31
helpers/api_types/go_swagger/generate_api.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package go_swagger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/juju/errors"
|
||||||
|
|
||||||
|
"git.dev.m-and-m.ovh/mderasse/gouick/helpers"
|
||||||
|
"git.dev.m-and-m.ovh/mderasse/gouick/models"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateAPI will generate api files such as server, controllers, test, ....
|
||||||
|
func (a APIType) GenerateAPI(path string, config *models.Config) error {
|
||||||
|
log.Debugf("Starting %s - %s", a.GetName(), helpers.GetCurrentFuncName())
|
||||||
|
|
||||||
|
// Launch Go Swagger
|
||||||
|
err := a.executeGoSwagger(path)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Fail to Execute Go Swagger")
|
||||||
|
return errors.Trace(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete api yaml temporary file
|
||||||
|
err = a.deleteTempApiYaml(path)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Fail to delete api yaml temporary file")
|
||||||
|
return errors.Trace(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
@ -95,6 +95,7 @@ func (a APIType) goSwaggerGenerate(path string) error {
|
|||||||
generateCmd.Server.Models.ModelPackage = "models"
|
generateCmd.Server.Models.ModelPackage = "models"
|
||||||
generateCmd.Server.Operations.APIPackage = "operations"
|
generateCmd.Server.Operations.APIPackage = "operations"
|
||||||
generateCmd.Server.Shared.StrictResponders = true
|
generateCmd.Server.Shared.StrictResponders = true
|
||||||
|
generateCmd.Server.Shared.Template = "stratoscale"
|
||||||
|
|
||||||
return generateCmd.Server.Execute(nil)
|
return generateCmd.Server.Execute(nil)
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import "git.dev.m-and-m.ovh/mderasse/gouick/models"
|
|||||||
type APITypeInterface interface {
|
type APITypeInterface interface {
|
||||||
CheckInitialize() error
|
CheckInitialize() error
|
||||||
CreateProjectSkeleton(path string, config *models.Config) error
|
CreateProjectSkeleton(path string, config *models.Config) error
|
||||||
|
GenerateAPI(path string, config *models.Config) error
|
||||||
GenerateDockerfile(path string, config *models.Config) error
|
GenerateDockerfile(path string, config *models.Config) error
|
||||||
GenerateLauncher(path string, config *models.Config) error
|
GenerateLauncher(path string, config *models.Config) error
|
||||||
GenerateMakefile(path string, config *models.Config) error
|
GenerateMakefile(path string, config *models.Config) error
|
||||||
|
Loading…
Reference in New Issue
Block a user