231 lines
4.1 KiB
Go
231 lines
4.1 KiB
Go
package generator
|
|
|
|
var (
|
|
MainTemp = `
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"flag"
|
|
"git.nobla.cn/golang/aeus"
|
|
"git.nobla.cn/golang/aeus/transport/cli"
|
|
"git.nobla.cn/golang/aeus/transport/grpc"
|
|
"git.nobla.cn/golang/aeus/transport/http"
|
|
|
|
"{{.PackageName}}/version"
|
|
"{{.PackageName}}/internal/scope"
|
|
"{{.PackageName}}/internal/service"
|
|
)
|
|
|
|
var (
|
|
versionFlag = flag.Bool("version", false, "Show version")
|
|
)
|
|
|
|
func main() {
|
|
var (
|
|
err error
|
|
)
|
|
flag.Parse()
|
|
if *versionFlag{
|
|
fmt.Println(version.Info())
|
|
os.Exit(0)
|
|
}
|
|
app := aeus.New(
|
|
aeus.WithName("{{.ShortName}}"),
|
|
aeus.WithVersion("{{.Version}}"),
|
|
aeus.WithServer(
|
|
http.New(),
|
|
grpc.New(),
|
|
cli.New(),
|
|
),
|
|
aeus.WithScope(scope.NewScope()),
|
|
aeus.WithServiceLoader(service.NewLoader()),
|
|
)
|
|
|
|
if err = app.Run(); err != nil {
|
|
fmt.Println("app run error:", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
`
|
|
|
|
ScopeTemp = `
|
|
package scope
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.nobla.cn/golang/aeus/transport/cli"
|
|
"git.nobla.cn/golang/aeus/transport/grpc"
|
|
"git.nobla.cn/golang/aeus/transport/http"
|
|
)
|
|
|
|
type ScopeContext struct {
|
|
ctx context.Context
|
|
Http *http.Server
|
|
Grpc *grpc.Server
|
|
Cli *cli.Server
|
|
}
|
|
|
|
func (s *ScopeContext) Init(ctx context.Context) (err error) {
|
|
s.ctx = ctx
|
|
return
|
|
}
|
|
|
|
func NewScope() *ScopeContext {
|
|
return &ScopeContext{}
|
|
}
|
|
`
|
|
|
|
ServiceLoaderTemp = `
|
|
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"{{.PackageName}}/internal/scope"
|
|
"git.nobla.cn/golang/aeus/transport/cli"
|
|
"git.nobla.cn/golang/aeus/transport/grpc"
|
|
"git.nobla.cn/golang/aeus/transport/http"
|
|
)
|
|
|
|
type serviceLoader struct {
|
|
Sope *scope.ScopeContext
|
|
Http *http.Server
|
|
Grpc *grpc.Server
|
|
Cli *cli.Server
|
|
}
|
|
|
|
func (s *serviceLoader) Init(ctx context.Context) (err error) {
|
|
// bind services here
|
|
return
|
|
}
|
|
|
|
func (s *serviceLoader) Run(ctx context.Context) (err error) {
|
|
return
|
|
}
|
|
|
|
func NewLoader() *serviceLoader {
|
|
return &serviceLoader{}
|
|
}
|
|
`
|
|
|
|
MakefileTemp = `
|
|
GOHOSTOS:=$(shell go env GOHOSTOS)
|
|
GOPATH:=$(shell go env GOPATH)
|
|
VERSION=$(shell git describe --tags --always)
|
|
DATETIME:=$(shell date "+%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
PROTO_DIR="api/v1/pb"
|
|
PROTO_OUT_DIR="api/v1/pb"
|
|
PROTO_FILES=$(shell find api -name *.proto)
|
|
|
|
.PHONY: proto
|
|
proto:
|
|
protoc --proto_path=$(PROTO_DIR) \
|
|
--proto_path=./third_party \
|
|
--go_out=paths=source_relative:$(PROTO_OUT_DIR) \
|
|
--go-grpc_out=paths=source_relative:$(PROTO_OUT_DIR) \
|
|
--go-aeus_out=paths=source_relative:$(PROTO_OUT_DIR) \
|
|
--validate_out=paths=source_relative,lang=go:$(PROTO_OUT_DIR) \
|
|
$(PROTO_FILES)
|
|
|
|
.PHONY: proto-clean
|
|
proto-clean:
|
|
rm -rf $(PROTO_OUT_DIR)/*.pb.go
|
|
rm -rf $(PROTO_OUT_DIR)/*.pb.validate.go
|
|
|
|
.PHONY: build
|
|
build:
|
|
go mod tidy
|
|
go mod vendor
|
|
go build -ldflags "-s -w -X '{{.PackageName}}/version.Version=$(VERSION)' -X '{{.PackageName}}/version.BuildDate=$(DATETIME)'" -o bin/{{.ShortName}} cmd/main.go
|
|
`
|
|
|
|
GreeterTemp = `
|
|
syntax = "proto3";
|
|
|
|
package greeter;
|
|
|
|
import "google/api/annotations.proto";
|
|
import "aeus/command.proto";
|
|
import "aeus/rest.proto";
|
|
import "validate/validate.proto";
|
|
|
|
option go_package = "{{.PackageName}}/api/v1/pb;pb";
|
|
|
|
// The greeting service definition.
|
|
service Greeter {
|
|
// Sends a greeting
|
|
rpc SayHello (HelloRequest) returns (HelloReply) {
|
|
option (google.api.http) = {
|
|
get: "/helloworld/{name}"
|
|
};
|
|
option (aeus.command) = {
|
|
path: "/helloworld/:name",
|
|
description: "Greeter"
|
|
};
|
|
}
|
|
}
|
|
|
|
// The request message containing the user's name.
|
|
message HelloRequest {
|
|
option (aeus.rest) = {
|
|
table: "users"
|
|
};
|
|
int64 id = 1 [(aeus.field)={gorm:"primary_key"},(validate.rules).int64.gt = 999];
|
|
string name = 2;
|
|
}
|
|
|
|
// The response message containing the greetings
|
|
message HelloReply {
|
|
string message = 1;
|
|
}
|
|
`
|
|
VersionTemp = `
|
|
package version
|
|
|
|
import "fmt"
|
|
|
|
var (
|
|
Version = "{{.Version}}"
|
|
BuildDate = "{{.Datetime}}"
|
|
ProductName = "{{.ShortName}}"
|
|
)
|
|
|
|
func Info() string {
|
|
return fmt.Sprintf("%s version: %s (built at %s)", ProductName, Version, BuildDate)
|
|
}
|
|
`
|
|
|
|
GitIgnoreTemp = `
|
|
.vscode
|
|
.idea
|
|
|
|
bin/
|
|
.svn/
|
|
.godeps
|
|
./build
|
|
.cover/
|
|
*.dat
|
|
vendor
|
|
|
|
*.o
|
|
*.a
|
|
*.so
|
|
|
|
# Folders
|
|
_obj
|
|
_test
|
|
`
|
|
ReadmeTemp = ``
|
|
|
|
GoModTemp = `
|
|
module {{.PackageName}}
|
|
|
|
go 1.23.0
|
|
`
|
|
)
|