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 ( | 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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user