91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package app
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import (
							 | 
						|||
| 
								 | 
							
									"bytes"
							 | 
						|||
| 
								 | 
							
									"errors"
							 | 
						|||
| 
								 | 
							
									"fmt"
							 | 
						|||
| 
								 | 
							
									"github.com/go-admin-team/go-admin-core/sdk/pkg"
							 | 
						|||
| 
								 | 
							
									"github.com/go-admin-team/go-admin-core/sdk/pkg/utils"
							 | 
						|||
| 
								 | 
							
									"github.com/spf13/cobra"
							 | 
						|||
| 
								 | 
							
									"text/template"
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								var (
							 | 
						|||
| 
								 | 
							
									appName  string
							 | 
						|||
| 
								 | 
							
									StartCmd = &cobra.Command{
							 | 
						|||
| 
								 | 
							
										Use:     "app",
							 | 
						|||
| 
								 | 
							
										Short:   "Create a new app",
							 | 
						|||
| 
								 | 
							
										Long:    "Use when you need to create a new app",
							 | 
						|||
| 
								 | 
							
										Example: "go-admin app -n admin",
							 | 
						|||
| 
								 | 
							
										Run: func(cmd *cobra.Command, args []string) {
							 | 
						|||
| 
								 | 
							
											run()
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func init() {
							 | 
						|||
| 
								 | 
							
									StartCmd.PersistentFlags().StringVarP(&appName, "name", "n", "", "Start server with provided configuration file")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func run() {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									fmt.Println(`start init`)
							 | 
						|||
| 
								 | 
							
									//1. 读取配置
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									fmt.Println(`generate migration file`)
							 | 
						|||
| 
								 | 
							
									_ = genFile()
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func genFile() error {
							 | 
						|||
| 
								 | 
							
									if appName == "" {
							 | 
						|||
| 
								 | 
							
										return errors.New("arg `name` invalid :name is empty")
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									path := "app/"
							 | 
						|||
| 
								 | 
							
									appPath := path + appName
							 | 
						|||
| 
								 | 
							
									err := utils.IsNotExistMkDir(appPath)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									apiPath := appPath + "/apis/"
							 | 
						|||
| 
								 | 
							
									err = utils.IsNotExistMkDir(apiPath)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									modelsPath := appPath + "/models/"
							 | 
						|||
| 
								 | 
							
									err = utils.IsNotExistMkDir(modelsPath)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									routerPath := appPath + "/router/"
							 | 
						|||
| 
								 | 
							
									err = utils.IsNotExistMkDir(routerPath)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									servicePath := appPath + "/service/"
							 | 
						|||
| 
								 | 
							
									err = utils.IsNotExistMkDir(servicePath)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									dtoPath := appPath + "/service/dto/"
							 | 
						|||
| 
								 | 
							
									err = utils.IsNotExistMkDir(dtoPath)
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									t1, err := template.ParseFiles("template/cmd_api.template")
							 | 
						|||
| 
								 | 
							
									if err != nil {
							 | 
						|||
| 
								 | 
							
										return err
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									m := map[string]string{}
							 | 
						|||
| 
								 | 
							
									m["appName"] = appName
							 | 
						|||
| 
								 | 
							
									var b1 bytes.Buffer
							 | 
						|||
| 
								 | 
							
									err = t1.Execute(&b1, m)
							 | 
						|||
| 
								 | 
							
									pkg.FileCreate(b1, "./cmd/api/"+appName+".go")
							 | 
						|||
| 
								 | 
							
									t2, err := template.ParseFiles("template/router.template")
							 | 
						|||
| 
								 | 
							
									var b2 bytes.Buffer
							 | 
						|||
| 
								 | 
							
									err = t2.Execute(&b2, nil)
							 | 
						|||
| 
								 | 
							
									pkg.FileCreate(b2, appPath+"/router/router.go")
							 | 
						|||
| 
								 | 
							
									return nil
							 | 
						|||
| 
								 | 
							
								}
							 |