From b5920cd815ec5a8957b3e4df1e7de69d340f3793 Mon Sep 17 00:00:00 2001 From: jaron Date: Mon, 25 Nov 2024 18:15:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(templates):=20serverless=20=E5=9F=BA?= =?UTF-8?q?=E4=BA=8E=20features=20=E7=89=B9=E6=80=A7=E5=A4=8D=E7=94=A8=20a?= =?UTF-8?q?pi=20=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(templates): serverless 基于 features 特性复用 api 模板 --- .github/workflows/upload.yaml | 2 +- .template/frame/api-serverless/.gitignore | 1 - .template/frame/api-serverless/LICENSE | 21 ----- .template/frame/api-serverless/README.md | 7 -- .../frame/api-serverless/app/.gitignore.tpl | 36 -------- .../frame/api-serverless/app/.jzero.yaml.tpl | 12 --- .../frame/api-serverless/app/Dockerfile.tpl | 26 ------ .../frame/api-serverless/app/README.md.tpl | 39 -------- .../frame/api-serverless/app/cmd/root.go.tpl | 49 ---------- .../api-serverless/app/cmd/server.go.tpl | 67 -------------- .../api-serverless/app/cmd/version.go.tpl | 55 ------------ .../api-serverless/app/desc/api/echo.api.tpl | 22 ----- .../frame/api-serverless/app/etc/etc.yaml.tpl | 7 -- .template/frame/api-serverless/app/go.mod.tpl | 7 -- .../frame/api-serverless/app/main.go.tpl | 9 -- .../app/server/config/config.go.tpl | 29 ------ .../app/server/custom/custom.go.tpl | 13 --- .../app/server/custom/routes.go.tpl | 14 --- .../app/server/middleware/error.go.tpl | 13 --- .../app/server/middleware/middleware.go.tpl | 12 --- .../app/server/middleware/response.go.tpl | 20 ----- .../app/server/middleware/validator.go.tpl | 90 ------------------- .../app/server/svc/service_context.go.tpl | 19 ---- .template/frame/api/app/.jzero.yaml.tpl | 3 + .template/frame/api/app/cmd/server.go.tpl | 6 +- .../frame/api/app/desc/api/version.api.tpl | 2 +- .../frame/api/app/plugins/plugins.go.tpl | 9 ++ .../app/serverless/serverless.go.tpl | 4 +- 28 files changed, 21 insertions(+), 573 deletions(-) delete mode 100644 .template/frame/api-serverless/.gitignore delete mode 100644 .template/frame/api-serverless/LICENSE delete mode 100644 .template/frame/api-serverless/README.md delete mode 100644 .template/frame/api-serverless/app/.gitignore.tpl delete mode 100644 .template/frame/api-serverless/app/.jzero.yaml.tpl delete mode 100644 .template/frame/api-serverless/app/Dockerfile.tpl delete mode 100644 .template/frame/api-serverless/app/README.md.tpl delete mode 100644 .template/frame/api-serverless/app/cmd/root.go.tpl delete mode 100644 .template/frame/api-serverless/app/cmd/server.go.tpl delete mode 100644 .template/frame/api-serverless/app/cmd/version.go.tpl delete mode 100644 .template/frame/api-serverless/app/desc/api/echo.api.tpl delete mode 100644 .template/frame/api-serverless/app/etc/etc.yaml.tpl delete mode 100644 .template/frame/api-serverless/app/go.mod.tpl delete mode 100644 .template/frame/api-serverless/app/main.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/config/config.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/custom/custom.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/custom/routes.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/middleware/error.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/middleware/middleware.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/middleware/response.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/middleware/validator.go.tpl delete mode 100644 .template/frame/api-serverless/app/server/svc/service_context.go.tpl create mode 100644 .template/frame/api/app/plugins/plugins.go.tpl rename .template/frame/{api-serverless => api}/app/serverless/serverless.go.tpl (92%) diff --git a/.github/workflows/upload.yaml b/.github/workflows/upload.yaml index 7bd857f0..ca05984a 100644 --- a/.github/workflows/upload.yaml +++ b/.github/workflows/upload.yaml @@ -76,7 +76,7 @@ jobs: cd .. rm -rf simpleapi-serverless - jzero new simpleapi-serverless --frame api-serverless + jzero new simpleapi-serverless --frame api --features serverless cd simpleapi-serverless && jzero gen jzero gen swagger go mod tidy && go mod download diff --git a/.template/frame/api-serverless/.gitignore b/.template/frame/api-serverless/.gitignore deleted file mode 100644 index 723ef36f..00000000 --- a/.template/frame/api-serverless/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.idea \ No newline at end of file diff --git a/.template/frame/api-serverless/LICENSE b/.template/frame/api-serverless/LICENSE deleted file mode 100644 index 9dd3ebcc..00000000 --- a/.template/frame/api-serverless/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 jzero - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/.template/frame/api-serverless/README.md b/.template/frame/api-serverless/README.md deleted file mode 100644 index f899ca7e..00000000 --- a/.template/frame/api-serverless/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# templates - -jzero template repo with only api project - -```shell -jzero new simpleapi --frame api-serverless-plugin -``` diff --git a/.template/frame/api-serverless/app/.gitignore.tpl b/.template/frame/api-serverless/app/.gitignore.tpl deleted file mode 100644 index 7b3503d1..00000000 --- a/.template/frame/api-serverless/app/.gitignore.tpl +++ /dev/null @@ -1,36 +0,0 @@ -# If you prefer the allow list template instead of the deny list, see community template: -# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore -# -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, built with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Dependency directories (remove the comment below to include it) -# vendor/ - -# Go workspace file -go.work - -# idea -.idea - -# Vs Code -.vscode - -# logs -logs - -# goreleaser output -dist - -# unix sock -*.sock \ No newline at end of file diff --git a/.template/frame/api-serverless/app/.jzero.yaml.tpl b/.template/frame/api-serverless/app/.jzero.yaml.tpl deleted file mode 100644 index d83e2a1d..00000000 --- a/.template/frame/api-serverless/app/.jzero.yaml.tpl +++ /dev/null @@ -1,12 +0,0 @@ -syntax: v1 - -gen: - hooks: - before: - - gorename {{ .Module }}/server {{ .Module }}/internal - after: - - gorename {{ .Module }}/internal {{ .Module }}/server - - jzero gen swagger - - split-api-types-dir: true - regen-api-handler: true \ No newline at end of file diff --git a/.template/frame/api-serverless/app/Dockerfile.tpl b/.template/frame/api-serverless/app/Dockerfile.tpl deleted file mode 100644 index 0b7d1b8f..00000000 --- a/.template/frame/api-serverless/app/Dockerfile.tpl +++ /dev/null @@ -1,26 +0,0 @@ -FROM --platform=$BUILDPLATFORM ghcr.io/jzero-io/jzero:latest as builder - -ARG TARGETARCH -ARG LDFLAGS - -ENV GOPROXY https://goproxy.cn,direct - -WORKDIR /usr/local/go/src/app - -COPY ./ ./ - -RUN --mount=type=cache,target=/go/pkg CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH go build -a -ldflags="$LDFLAGS" -o /dist/app main.go \ - && jzero gen swagger \ - && cp -r etc /dist/etc \ - && mkdir -p /dist/desc && cp -r desc/swagger /dist/desc - - -FROM --platform=$TARGETPLATFORM alpine:latest - -WORKDIR /dist - -COPY --from=builder /dist . - -EXPOSE 8001 - -CMD ["./app", "server"] \ No newline at end of file diff --git a/.template/frame/api-serverless/app/README.md.tpl b/.template/frame/api-serverless/app/README.md.tpl deleted file mode 100644 index a643b4ed..00000000 --- a/.template/frame/api-serverless/app/README.md.tpl +++ /dev/null @@ -1,39 +0,0 @@ -# {{ .APP }} - -## Install Jzero Framework - -```shell -go install github.com/jzero-io/jzero@latest - -jzero check -``` - -## Generate code - -### Generate server code - -```shell -jzero gen -``` - -### Generate swagger code - -```shell -jzero gen swagger -``` - -you can see generated swagger json in `desc/swagger` - -## Build docker image - -```shell -# add a builder first -docker buildx create --use --name=mybuilder --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master - -# build and load -docker buildx build --platform linux/{{ .GoArch }} --progress=plain -t {{ .APP }}:latest . --load -``` - -## Documents - -https://jzero.jaronnie.com \ No newline at end of file diff --git a/.template/frame/api-serverless/app/cmd/root.go.tpl b/.template/frame/api-serverless/app/cmd/root.go.tpl deleted file mode 100644 index 0f090255..00000000 --- a/.template/frame/api-serverless/app/cmd/root.go.tpl +++ /dev/null @@ -1,49 +0,0 @@ -package cmd - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/spf13/viper" -) - -var CfgFile string - -// rootCmd represents the base command when called without any subcommands -var rootCmd = &cobra.Command{ - Use: "{{ .APP }}", - Short: "{{ .APP }} root", - Long: "{{ .APP }} root.", - CompletionOptions: cobra.CompletionOptions{ - DisableDefaultCmd: true, - }, -} - -// Execute adds all child commands to the root command and sets flags appropriately. -// This is called by main.main(). It only needs to happen once to the rootCmd. -func Execute() { - err := rootCmd.Execute() - if err != nil { - os.Exit(1) - } -} - -func init() { - cobra.OnInitialize(initConfig) - - // Here you will define your flags and configuration settings. - // Cobra supports persistent flags, which, if defined here, - // will be global for your application. - - rootCmd.PersistentFlags().StringVar(&CfgFile, "config", "etc/etc.yaml", "config file (default is project root dir etc/etc.yaml") -} - -// initConfig reads in config file and ENV variables if set. -func initConfig() { - if len(os.Args) <= 1 || os.Args[1] != serverCmd.Name() { - return - } - - viper.SetConfigFile(CfgFile) - viper.AutomaticEnv() // read in environment variables that match -} \ No newline at end of file diff --git a/.template/frame/api-serverless/app/cmd/server.go.tpl b/.template/frame/api-serverless/app/cmd/server.go.tpl deleted file mode 100644 index 47bf7a3d..00000000 --- a/.template/frame/api-serverless/app/cmd/server.go.tpl +++ /dev/null @@ -1,67 +0,0 @@ -package cmd - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/zeromicro/go-zero/core/conf" - "github.com/zeromicro/go-zero/core/logx" - "github.com/zeromicro/go-zero/core/service" - "github.com/zeromicro/go-zero/rest" - "github.com/common-nighthawk/go-figure" - - "{{ .Module }}/server/config" - "{{ .Module }}/server/handler" - "{{ .Module }}/server/svc" - "{{ .Module }}/server/middleware" -) - -// serverCmd represents the server command -var serverCmd = &cobra.Command{ - Use: "server", - Short: "{{ .APP }} server", - Long: "{{ .APP }} server", - Run: func(cmd *cobra.Command, args []string) { - var c config.Config - conf.MustLoad(CfgFile, &c) - config.C = c - - // set up logger - if err := logx.SetUp(c.Log.LogConf); err != nil { - logx.Must(err) - } - if c.Log.LogConf.Mode != "console" { - logx.AddWriter(logx.NewWriter(os.Stdout)) - } - - ctx := svc.NewServiceContext(c) - run(ctx) - }, -} - -func run(svcCtx *svc.ServiceContext) { - server := rest.MustNewServer(svcCtx.Config.Rest.RestConf) - middleware.Register(server) - - // server add api handlers - handler.RegisterHandlers(server, svcCtx) - - // server add custom routes - svcCtx.Custom.AddRoutes(server) - - group := service.NewServiceGroup() - group.Add(server) - group.Add(svcCtx.Custom) - - printBanner(svcCtx.Config) - logx.Infof("Starting rest server at %s:%d...", svcCtx.Config.Rest.Host, svcCtx.Config.Rest.Port) - group.Start() -} - -func printBanner(c config.Config) { - figure.NewColorFigure(c.Banner.Text, c.Banner.FontName, c.Banner.Color, true).Print() -} - -func init() { - rootCmd.AddCommand(serverCmd) -} diff --git a/.template/frame/api-serverless/app/cmd/version.go.tpl b/.template/frame/api-serverless/app/cmd/version.go.tpl deleted file mode 100644 index dc890ce4..00000000 --- a/.template/frame/api-serverless/app/cmd/version.go.tpl +++ /dev/null @@ -1,55 +0,0 @@ -package cmd - -import ( - "bytes" - "fmt" - "runtime" - "time" - - "github.com/spf13/cast" - "github.com/spf13/cobra" -) - -var ( - Version string - Commit string - Date string -) - -// versionCmd represents the version command -var versionCmd = &cobra.Command{ - Use: "version", - Short: "{{ .APP }} version", - Long: `{{ .APP }} version`, - RunE: getVersion, -} - -func getVersion(_ *cobra.Command, _ []string) error { - var versionBuffer bytes.Buffer - - if Version != "" { - versionBuffer.WriteString(fmt.Sprintf("{{ .APP }} version %s %s/%s\n", Version, runtime.GOOS, runtime.GOARCH)) - } else { - versionBuffer.WriteString(fmt.Sprintf("{{ .APP }} version %s %s/%s\n", "unknown", runtime.GOOS, runtime.GOARCH)) - } - - versionBuffer.WriteString(fmt.Sprintf("Go version %s\n", runtime.Version())) - if Commit != "" { - versionBuffer.WriteString(fmt.Sprintf("Git commit %s\n", Commit)) - } else { - versionBuffer.WriteString(fmt.Sprintf("Git commit %s\n", "unknown")) - } - - if Date != "" { - versionBuffer.WriteString(fmt.Sprintf("Build date %s\n", cast.ToTimeInDefaultLocation(Date, time.Local))) - } else { - versionBuffer.WriteString(fmt.Sprintf("Build date %s\n", "unknown")) - } - - fmt.Print(versionBuffer.String()) - return nil -} - -func init() { - rootCmd.AddCommand(versionCmd) -} diff --git a/.template/frame/api-serverless/app/desc/api/echo.api.tpl b/.template/frame/api-serverless/app/desc/api/echo.api.tpl deleted file mode 100644 index 8a8aee14..00000000 --- a/.template/frame/api-serverless/app/desc/api/echo.api.tpl +++ /dev/null @@ -1,22 +0,0 @@ -syntax = "v1" - -info ( - go_package: "echo" -) - -type EchoRequest { - message string `form:"message"` -} - -type EchoResponse { - message string `json:"message"` -} - -@server( - prefix: /api/{{ .APP }} - group: echo -) -service {{ .APP | ToCamel }} { - @handler Echo - get /echo (EchoRequest) returns (EchoResponse) -} diff --git a/.template/frame/api-serverless/app/etc/etc.yaml.tpl b/.template/frame/api-serverless/app/etc/etc.yaml.tpl deleted file mode 100644 index e3523ec2..00000000 --- a/.template/frame/api-serverless/app/etc/etc.yaml.tpl +++ /dev/null @@ -1,7 +0,0 @@ -rest: - name: {{ .APP }}-api - host: 0.0.0.0 - port: 8001 - -log: - encoding: plain diff --git a/.template/frame/api-serverless/app/go.mod.tpl b/.template/frame/api-serverless/app/go.mod.tpl deleted file mode 100644 index 8762b7e3..00000000 --- a/.template/frame/api-serverless/app/go.mod.tpl +++ /dev/null @@ -1,7 +0,0 @@ -module {{ .Module }} - -go {{ .GoVersion }} - -require ( - github.com/spf13/viper v1.18.2 -) \ No newline at end of file diff --git a/.template/frame/api-serverless/app/main.go.tpl b/.template/frame/api-serverless/app/main.go.tpl deleted file mode 100644 index 33b7db03..00000000 --- a/.template/frame/api-serverless/app/main.go.tpl +++ /dev/null @@ -1,9 +0,0 @@ -package main - -import ( - "{{ .Module }}/cmd" -) - -func main() { - cmd.Execute() -} \ No newline at end of file diff --git a/.template/frame/api-serverless/app/server/config/config.go.tpl b/.template/frame/api-serverless/app/server/config/config.go.tpl deleted file mode 100644 index 754202ec..00000000 --- a/.template/frame/api-serverless/app/server/config/config.go.tpl +++ /dev/null @@ -1,29 +0,0 @@ -package config - -import ( - "github.com/zeromicro/go-zero/core/logx" - "github.com/zeromicro/go-zero/rest" -) - -var C Config - -type Config struct { - Rest RestConf - Log LogConf - - Banner BannerConf -} - -type RestConf struct { - rest.RestConf -} - -type LogConf struct { - logx.LogConf -} - -type BannerConf struct { - Text string `json:",default=JZERO"` - Color string `json:",default=green"` - FontName string `json:",default=starwars,options=big|larry3d|starwars|standard"` -} \ No newline at end of file diff --git a/.template/frame/api-serverless/app/server/custom/custom.go.tpl b/.template/frame/api-serverless/app/server/custom/custom.go.tpl deleted file mode 100644 index 76b361df..00000000 --- a/.template/frame/api-serverless/app/server/custom/custom.go.tpl +++ /dev/null @@ -1,13 +0,0 @@ -package custom - -type Custom struct{} - -func New() *Custom { - return &Custom{} -} - -// Start Please add custom logic here. -func (c *Custom) Start() {} - -// Stop Please add shut down logic here. -func (c *Custom) Stop() {} diff --git a/.template/frame/api-serverless/app/server/custom/routes.go.tpl b/.template/frame/api-serverless/app/server/custom/routes.go.tpl deleted file mode 100644 index b59d9fcb..00000000 --- a/.template/frame/api-serverless/app/server/custom/routes.go.tpl +++ /dev/null @@ -1,14 +0,0 @@ -package custom - -import ( - "github.com/jzero-io/jzero-contrib/swaggerv2" - "github.com/zeromicro/go-zero/rest" -) - -func (c *Custom) AddRoutes(server *rest.Server) { - // server add swagger routes. If you do not want it, you can delete this line - swaggerv2.RegisterRoutes(server) - - // add custom route - // server.AddRoute(rest.Route{}) -} diff --git a/.template/frame/api-serverless/app/server/middleware/error.go.tpl b/.template/frame/api-serverless/app/server/middleware/error.go.tpl deleted file mode 100644 index b3369f93..00000000 --- a/.template/frame/api-serverless/app/server/middleware/error.go.tpl +++ /dev/null @@ -1,13 +0,0 @@ -package middleware - -import ( - "net/http" -) - -func ErrorMiddleware(err error) (int, any) { - return http.StatusOK, Body{ - Data: nil, - Code: http.StatusInternalServerError, - Message: err.Error(), - } -} diff --git a/.template/frame/api-serverless/app/server/middleware/middleware.go.tpl b/.template/frame/api-serverless/app/server/middleware/middleware.go.tpl deleted file mode 100644 index 1c0322b9..00000000 --- a/.template/frame/api-serverless/app/server/middleware/middleware.go.tpl +++ /dev/null @@ -1,12 +0,0 @@ -package middleware - -import ( - "github.com/zeromicro/go-zero/rest" - "github.com/zeromicro/go-zero/rest/httpx" -) - -func Register(server *rest.Server) { - httpx.SetOkHandler(ResponseMiddleware) - httpx.SetErrorHandler(ErrorMiddleware) - httpx.SetValidator(NewValidator()) -} diff --git a/.template/frame/api-serverless/app/server/middleware/response.go.tpl b/.template/frame/api-serverless/app/server/middleware/response.go.tpl deleted file mode 100644 index 3cd59746..00000000 --- a/.template/frame/api-serverless/app/server/middleware/response.go.tpl +++ /dev/null @@ -1,20 +0,0 @@ -package middleware - -import ( - "context" - "net/http" -) - -type Body struct { - Data interface{} `json:"data"` - Code int `json:"code"` - Message string `json:"message"` -} - -func ResponseMiddleware(_ context.Context, data any) any { - return Body{ - Data: data, - Code: http.StatusOK, - Message: "success", - } -} diff --git a/.template/frame/api-serverless/app/server/middleware/validator.go.tpl b/.template/frame/api-serverless/app/server/middleware/validator.go.tpl deleted file mode 100644 index 7a176504..00000000 --- a/.template/frame/api-serverless/app/server/middleware/validator.go.tpl +++ /dev/null @@ -1,90 +0,0 @@ -package middleware - -import ( - "fmt" - "net/http" - "reflect" - "strings" - - "github.com/go-playground/locales/zh_Hans_CN" - unTrans "github.com/go-playground/universal-translator" - "github.com/go-playground/validator/v10" - zhTrans "github.com/go-playground/validator/v10/translations/zh" - "github.com/pkg/errors" -) - -type Validator struct{} - -func NewValidator() *Validator { - return &Validator{} -} - -func (v *Validator) Validate(r *http.Request, data any) (err error) { - validate := validator.New() - uni := unTrans.New(zh_Hans_CN.New()) - - // register validation functions for custom validation - //err = validate.RegisterValidation("customValidation", func(fl validator.FieldLevel) bool { - // return false - //}) - - trans, _ := uni.GetTranslator("zh_Hans_CN") - err = zhTrans.RegisterDefaultTranslations(validate, trans) - if err != nil { - return err - } - - // register custom validation error message - //err = validate.RegisterTranslation("customValidation", trans, registerTranslator("customValidation", "自定义错误消息"), translate) - //if err != nil { - // return err - //} - - validate.RegisterTagNameFunc(func(field reflect.StructField) string { - return getLabelValue(field) - }) - - err = validate.Struct(data) - if err != nil { - for _, ve := range err.(validator.ValidationErrors) { - if trans != nil { - return errors.Errorf(ve.Translate(trans)) - } - return ve - } - } - return nil -} - -func getLabelValue(field reflect.StructField) string { - tags := []string{"label", "json", "form", "path"} - label := "" - - for _, tag := range tags { - label = field.Tag.Get(tag) - if label != "" { - break - } - } - return "" -} - -func registerTranslator(tag string, msg string) validator.RegisterTranslationsFunc { - return func(trans unTrans.Translator) error { - if err := trans.Add(tag, msg, false); err != nil { - return err - } - return nil - } -} - -func translate(trans unTrans.Translator, fe validator.FieldError) string { - msg, err := trans.T(fe.Tag(), fe.Field()) - if err != nil { - panic(fe.(error).Error()) - } - if len(strings.Split(fe.Namespace(), ".")) >= 2 { - return fmt.Sprintf("%s%s", strings.Split(fe.Namespace(), ".")[1], msg) - } - return msg -} \ No newline at end of file diff --git a/.template/frame/api-serverless/app/server/svc/service_context.go.tpl b/.template/frame/api-serverless/app/server/svc/service_context.go.tpl deleted file mode 100644 index ec8a8a1e..00000000 --- a/.template/frame/api-serverless/app/server/svc/service_context.go.tpl +++ /dev/null @@ -1,19 +0,0 @@ -package svc - -import ( - "{{ .Module }}/internal/config" - "{{ .Module }}/internal/custom" -) - -type ServiceContext struct { - Config config.Config - - Custom *custom.Custom -} - -func NewServiceContext(c config.Config) *ServiceContext { - return &ServiceContext{ - Config: c, - Custom: custom.New(), - } -} diff --git a/.template/frame/api/app/.jzero.yaml.tpl b/.template/frame/api/app/.jzero.yaml.tpl index 186d2ec9..628a8e36 100644 --- a/.template/frame/api/app/.jzero.yaml.tpl +++ b/.template/frame/api/app/.jzero.yaml.tpl @@ -2,7 +2,10 @@ syntax: v1 gen: hooks: + {{ if has "serverless" .Features }}before: + - gorename {{ .Module }}/server {{ .Module }}/internal{{ end }} after: + {{ if has "serverless" .Features }}- gorename {{ .Module }}/internal {{ .Module }}/server{{ end }} - jzero gen swagger split-api-types-dir: true \ No newline at end of file diff --git a/.template/frame/api/app/cmd/server.go.tpl b/.template/frame/api/app/cmd/server.go.tpl index af0cea88..faba77da 100644 --- a/.template/frame/api/app/cmd/server.go.tpl +++ b/.template/frame/api/app/cmd/server.go.tpl @@ -11,9 +11,10 @@ import ( "github.com/common-nighthawk/go-figure" "{{ .Module }}/internal/config" + "{{ .Module }}/internal/middleware" "{{ .Module }}/internal/handler" "{{ .Module }}/internal/svc" - "{{ .Module }}/internal/middleware" + {{ if has "serverless_core" .Features }}"{{ .Module }}/plugins"{{end}} ) // serverCmd represents the server command @@ -49,6 +50,9 @@ func run(svcCtx *svc.ServiceContext) { // server add custom routes svcCtx.Custom.AddRoutes(server) + {{ if has "serverless_core" .Features }}// load plugins features + plugins.LoadPlugins(server){{end}} + group := service.NewServiceGroup() group.Add(server) group.Add(svcCtx.Custom) diff --git a/.template/frame/api/app/desc/api/version.api.tpl b/.template/frame/api/app/desc/api/version.api.tpl index 76157ee6..57baa3a9 100644 --- a/.template/frame/api/app/desc/api/version.api.tpl +++ b/.template/frame/api/app/desc/api/version.api.tpl @@ -14,7 +14,7 @@ type GetResponse { } @server( - prefix: /api/v1 + prefix: /api{{ if has "serverless" .Features }}/{{ .APP }}{{end}}/v1 group: version ) service {{ .APP | ToCamel }} { diff --git a/.template/frame/api/app/plugins/plugins.go.tpl b/.template/frame/api/app/plugins/plugins.go.tpl new file mode 100644 index 00000000..9805144e --- /dev/null +++ b/.template/frame/api/app/plugins/plugins.go.tpl @@ -0,0 +1,9 @@ +{{ if has "serverless_core" .Features }}package plugins + +import ( + "github.com/zeromicro/go-zero/rest" +) + +func LoadPlugins(server *rest.Server) { + // server.AddRoutes(serverless.Routes()) +}{{ end }} \ No newline at end of file diff --git a/.template/frame/api-serverless/app/serverless/serverless.go.tpl b/.template/frame/api/app/serverless/serverless.go.tpl similarity index 92% rename from .template/frame/api-serverless/app/serverless/serverless.go.tpl rename to .template/frame/api/app/serverless/serverless.go.tpl index dff43b3e..967dd8e7 100644 --- a/.template/frame/api-serverless/app/serverless/serverless.go.tpl +++ b/.template/frame/api/app/serverless/serverless.go.tpl @@ -1,4 +1,4 @@ -package serverless +{{ if has "serverless" .Features }}package serverless import ( "path/filepath" @@ -40,4 +40,4 @@ func init() { func Routes() []rest.Route { return server.Routes() -} \ No newline at end of file +}{{end}} \ No newline at end of file