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:
		@@ -5,12 +5,16 @@ package cmd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"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.
 | 
			
		||||
var apiCmd = &cobra.Command{
 | 
			
		||||
	Use:   "api",
 | 
			
		||||
	Short: "Generate Go-Swagger Files and Controllers",
 | 
			
		||||
	Short: "Generate API Files and Controllers",
 | 
			
		||||
	Run:   runGenerateAPI,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -20,4 +24,25 @@ func init() {
 | 
			
		||||
 | 
			
		||||
// runGenerateAPI will generate api files such as controllers, server, unit test, ... for the current project.
 | 
			
		||||
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.Operations.APIPackage = "operations"
 | 
			
		||||
	generateCmd.Server.Shared.StrictResponders = true
 | 
			
		||||
	generateCmd.Server.Shared.Template = "stratoscale"
 | 
			
		||||
 | 
			
		||||
	return generateCmd.Server.Execute(nil)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import "git.dev.m-and-m.ovh/mderasse/gouick/models"
 | 
			
		||||
type APITypeInterface interface {
 | 
			
		||||
	CheckInitialize() error
 | 
			
		||||
	CreateProjectSkeleton(path string, config *models.Config) error
 | 
			
		||||
	GenerateAPI(path string, config *models.Config) error
 | 
			
		||||
	GenerateDockerfile(path string, config *models.Config) error
 | 
			
		||||
	GenerateLauncher(path string, config *models.Config) error
 | 
			
		||||
	GenerateMakefile(path string, config *models.Config) error
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user