|
|
|
package quickstart
|
|
|
|
|
|
|
|
import (
|
|
|
|
_ "embed"
|
|
|
|
"io/ioutil"
|
|
|
|
"path/filepath"
|
|
|
|
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
|
"github.com/zeromicro/go-zero/tools/goctl/api/gogen"
|
|
|
|
"github.com/zeromicro/go-zero/tools/goctl/util"
|
|
|
|
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
//go:embed idl/greet.api
|
|
|
|
apiContent string
|
|
|
|
//go:embed idl/svc.tpl
|
|
|
|
svcContent string
|
|
|
|
//go:embed idl/apilogic.tpl
|
|
|
|
apiLogicContent string
|
|
|
|
//go:embed idl/api.yaml
|
|
|
|
apiEtcContent string
|
|
|
|
|
|
|
|
apiWorkDir string
|
|
|
|
)
|
|
|
|
|
|
|
|
func initAPIFlags() error {
|
|
|
|
apiWorkDir = filepath.Join(projectDir, "api")
|
|
|
|
if err := pathx.MkdirIfNotExist(apiWorkDir); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
apiFilename := filepath.Join(apiWorkDir, "greet.api")
|
|
|
|
apiBytes := []byte(apiContent)
|
|
|
|
if err := ioutil.WriteFile(apiFilename, apiBytes, 0666); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
gogen.VarStringDir = apiWorkDir
|
|
|
|
gogen.VarStringAPI = apiFilename
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type mono struct {
|
|
|
|
callRPC bool
|
|
|
|
}
|
|
|
|
|
|
|
|
func newMonoService(callRPC bool) mono {
|
|
|
|
m := mono{callRPC}
|
|
|
|
m.createAPIProject()
|
|
|
|
return m
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m mono) createAPIProject() {
|
|
|
|
logx.Must(initAPIFlags())
|
|
|
|
log.Debug(">> Generating quickstart api project...")
|
|
|
|
logx.Must(gogen.GoCommand(nil, nil))
|
|
|
|
etcFile := filepath.Join(apiWorkDir, "etc", "greet.yaml")
|
|
|
|
logx.Must(ioutil.WriteFile(etcFile, []byte(apiEtcContent), 0666))
|
|
|
|
logicFile := filepath.Join(apiWorkDir, "internal", "logic", "pinglogic.go")
|
|
|
|
|
|
|
|
logx.Must(util.With("logic").Parse(apiLogicContent).SaveTo(map[string]bool{
|
|
|
|
"callRPC": m.callRPC,
|
|
|
|
}, logicFile, true))
|
|
|
|
|
|
|
|
if m.callRPC {
|
|
|
|
svcFile := filepath.Join(apiWorkDir, "internal", "svc", "servicecontext.go")
|
|
|
|
logx.Must(ioutil.WriteFile(svcFile, []byte(svcContent), 0666))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m mono) start() {
|
|
|
|
if !m.callRPC {
|
|
|
|
goModTidy(projectDir)
|
|
|
|
}
|
|
|
|
log.Debug(">> Ready to start an API server...")
|
|
|
|
log.Debug(">> Run 'curl http://127.0.0.1:8888/ping' after service startup...")
|
|
|
|
goStart(apiWorkDir)
|
|
|
|
}
|