Skip to content

Commit acdcb11

Browse files
committed
adjust directory structure of large repository
1 parent 1907ce3 commit acdcb11

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1225
-748
lines changed

cmd/protoc-gen-go-gin/api/v1/greeter.proto

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ syntax = "proto3";
33
package api.greeter.v1;
44

55
import "google/api/annotations.proto";
6-
import "google/api/http.proto";
76

8-
option go_package = "yourModuleName222/api/v1";
7+
option go_package = "yourModuleName/api/v1";
98

109
service GreeterService {
1110
// create a record
@@ -23,6 +22,12 @@ service GreeterService {
2322
};
2423
}
2524

25+
rpc DeleteByID2(DeleteGreeterByIDRequest) returns (DeleteGreeterByIDReply) {
26+
option (google.api.http) = {
27+
delete: "/api/v1/greeter2/{id}"
28+
};
29+
}
30+
2631
// update a record by id
2732
rpc UpdateByID(UpdateGreeterByIDRequest) returns (UpdateGreeterByIDReply) {
2833
option (google.api.http) = {

cmd/protoc-gen-go-gin/api/v1/mixed.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package v1;
44

55
import "google/api/annotations.proto";
66

7-
option go_package = "yourModuleName333/api/v1";
7+
option go_package = "yourModuleName/api/v1";
88

99
service mixed {
1010
// create a record

cmd/protoc-gen-go-gin/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ protoc --proto_path=. --proto_path=./third_party --go-gin_out=. --go-gin_opt=pat
3939
protoc --proto_path=. --proto_path=./third_party --go-gin_out=. --go-gin_opt=paths=source_relative --go-gin_opt=plugin=mix \
4040
--go-gin_opt=moduleName=yourModuleName --go-gin_opt=serverName=yourServerName *.proto
4141
42-
# if you want the generated code to suited to mono-repo, you need to specify the parameter --go-gin_opt=suitedMonoRepo=true
42+
# if you want the generated code to suited to mono-repo, you need to set the parameter --go-gin_opt=suitedMonoRepo=true
4343
4444
Tip:
4545
If you want to merge the code, after generating the code, execute the command "sponge merge http-pb" or
@@ -89,7 +89,7 @@ func main() {
8989
pluginName := strings.ReplaceAll(plugin, " ", "")
9090
dirName := "internal"
9191
if suitedMonoRepo {
92-
dirName = "Internal"
92+
dirName = serverName + "/internal"
9393
}
9494
switch pluginName {
9595
case handlerPlugin:
@@ -279,7 +279,7 @@ func firstLetterToUpper(s string) []byte {
279279

280280
func adaptMonoRepo(moduleName string, serverName string, data []byte) []byte {
281281
matchStr := map[string]string{
282-
fmt.Sprintf("\"%s/internal/", moduleName): fmt.Sprintf("\"%s/Internal/", moduleName+"/"+serverName),
282+
fmt.Sprintf("\"%s/internal/", moduleName): fmt.Sprintf("\"%s/internal/", moduleName+"/"+serverName),
283283
fmt.Sprintf("\"%s/configs", moduleName): fmt.Sprintf("\"%s/configs", moduleName+"/"+serverName),
284284
fmt.Sprintf("\"%s/api", moduleName): fmt.Sprintf("\"%s/api", moduleName+"/"+serverName),
285285
}

cmd/protoc-gen-go-rpc-tmpl/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const (
2222
protoc --proto_path=. --proto_path=./third_party --go-rpc-tmpl_out=. --go-rpc-tmpl_opt=paths=source_relative \
2323
--go-rpc-tmpl_opt=moduleName=yourModuleName --go-rpc-tmpl_opt=serverName=yourServerName *.proto
2424
25-
# if you want the generated code to suited to mono-repo, you need to specify the parameter --go-gin_opt=suitedMonoRepo=true
25+
# if you want the generated code to suited to mono-repo, you need to set the parameter --go-gin_opt=suitedMonoRepo=true
2626
2727
Tip:
2828
If you want to merge the code, after generating the code, execute the command "sponge merge rpc-pb",
@@ -72,7 +72,7 @@ func main() {
7272

7373
dirName := "internal"
7474
if suitedMonoRepo {
75-
dirName = "Internal"
75+
dirName = serverName + "/internal"
7676
}
7777
if tmplDir == "" {
7878
tmplDir = dirName + "/service"
@@ -182,7 +182,7 @@ func firstLetterToUpper(s string) []byte {
182182

183183
func adaptMonoRepo(moduleName string, serverName string, data []byte) []byte {
184184
matchStr := map[string]string{
185-
fmt.Sprintf("\"%s/internal/", moduleName): fmt.Sprintf("\"%s/Internal/", moduleName+"/"+serverName),
185+
fmt.Sprintf("\"%s/internal/", moduleName): fmt.Sprintf("\"%s/internal/", moduleName+"/"+serverName),
186186
fmt.Sprintf("\"%s/configs", moduleName): fmt.Sprintf("\"%s/configs", moduleName+"/"+serverName),
187187
fmt.Sprintf("\"%s/api", moduleName): fmt.Sprintf("\"%s/api", moduleName+"/"+serverName),
188188
}

cmd/sponge/commands/generate/cache.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package generate
33
import (
44
"errors"
55
"fmt"
6+
"strings"
67

78
"github.com/fatih/color"
89
"github.com/spf13/cobra"
@@ -33,12 +34,12 @@ func CacheCommand(parentName string) *cobra.Command {
3334
3435
Examples:
3536
# generate kv cache code
36-
sponge %s cache --module-name=yourModuleName --cache-name=userToken --prefix-key=user:token: --key-name=id --key-type=uint64 --value-name=token --value-type=string
37+
sponge %s cache --module-name=yourModuleName --cache-name=userToken --key-name=id --key-type=uint64 --value-name=token --value-type=string
3738
3839
# generate kv cache code and specify the server directory, Note: code generation will be canceled when the latest generated file already exists.
39-
sponge %s cache --module-name=yourModuleName --cache-name=token --prefix-key=user:token: --key-name=id --key-type=uint64 --value-name=token --value-type=string --out=./yourServerDir
40+
sponge %s cache --module-name=yourModuleName --cache-name=token --prefix-key=user:token --key-name=id --key-type=uint64 --value-name=token --value-type=string --out=./yourServerDir
4041
41-
# if you want the generated code to suited to mono-repo, you need to specify the parameter --suited-mono-repo=true --serverName=yourServerName
42+
# if you want the generated code to suited to mono-repo, you need to set the parameter --suited-mono-repo=true --server-name=yourServerName
4243
`, parentName, parentName)),
4344
SilenceErrors: true,
4445
SilenceUsage: true,
@@ -58,6 +59,13 @@ Examples:
5859
serverName = convertServerName(serverName)
5960
outPath = changeOutPath(outPath, serverName)
6061
}
62+
cacheName = strings.ReplaceAll(cacheName, ":", "")
63+
64+
if prefixKey == "" || prefixKey == ":" {
65+
prefixKey = cacheName + ":"
66+
} else if prefixKey[len(prefixKey)-1] != ':' {
67+
prefixKey += ":"
68+
}
6169

6270
var err error
6371
var g = &stringCacheGenerator{
@@ -91,14 +99,14 @@ using help:
9199
cmd.Flags().StringVarP(&moduleName, "module-name", "m", "", "module-name is the name of the module in the go.mod file")
92100
cmd.Flags().StringVarP(&cacheName, "cache-name", "c", "", "cache name, e.g. userToken")
93101
_ = cmd.MarkFlagRequired("cache-name")
94-
cmd.Flags().StringVarP(&prefixKey, "prefix-key", "p", "", "cache prefix key, must end with a colon, e.g. user:token:")
95-
cmd.Flags().StringVarP(&keyName, "key-name", "", "", "key name, e.g. id")
102+
cmd.Flags().StringVarP(&prefixKey, "prefix-key", "p", "", "cache prefix key, e.g. user:token")
103+
cmd.Flags().StringVarP(&keyName, "key-name", "k", "", "key name, e.g. id")
96104
_ = cmd.MarkFlagRequired("key-name")
97-
cmd.Flags().StringVarP(&keyType, "key-type", "", "", "key go type, e.g. uint64")
105+
cmd.Flags().StringVarP(&keyType, "key-type", "t", "", "key go type, e.g. uint64")
98106
_ = cmd.MarkFlagRequired("key-type")
99-
cmd.Flags().StringVarP(&valueName, "value-name", "", "", "value name, e.g. token")
107+
cmd.Flags().StringVarP(&valueName, "value-name", "v", "", "value name, e.g. token")
100108
_ = cmd.MarkFlagRequired("value-name")
101-
cmd.Flags().StringVarP(&valueType, "value-type", "", "", "value go type, e.g. string")
109+
cmd.Flags().StringVarP(&valueType, "value-type", "w", "", "value go type, e.g. string")
102110
_ = cmd.MarkFlagRequired("value-type")
103111
cmd.Flags().StringVarP(&serverName, "server-name", "s", "", "server name")
104112
cmd.Flags().BoolVarP(&suitedMonoRepo, "suited-mono-repo", "l", false, "whether the generated code is suitable for mono-repo")
@@ -122,18 +130,12 @@ type stringCacheGenerator struct {
122130
}
123131

124132
func (g *stringCacheGenerator) generateCode() (string, error) {
125-
subTplName := "cache"
133+
subTplName := codeNameCache
126134
r := Replacers[TplNameSponge]
127135
if r == nil {
128136
return "", errors.New("replacer is nil")
129137
}
130138

131-
if g.prefixKey == "" || g.prefixKey == ":" {
132-
g.prefixKey = g.cacheName + ":"
133-
} else if g.prefixKey[len(g.prefixKey)-1] != ':' {
134-
g.prefixKey += ":"
135-
}
136-
137139
// specify the subdirectory and files
138140
subDirs := []string{}
139141
subFiles := []string{"internal/cache/cacheNameExample.go"}
@@ -207,7 +209,7 @@ func (g *stringCacheGenerator) addFields(r replacer.Replacer) []replacer.Field {
207209
}...)
208210

209211
if g.suitedMonoRepo {
210-
fs := SubServerCodeFields(r.GetOutputDir(), g.moduleName, g.serverName)
212+
fs := SubServerCodeFields(g.moduleName, g.serverName)
211213
fields = append(fields, fs...)
212214
}
213215

cmd/sponge/commands/generate/common.go

Lines changed: 132 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"regexp"
1212
"strconv"
1313
"strings"
14+
"time"
1415

1516
"github.com/huandu/xstrings"
1617

@@ -45,7 +46,7 @@ const (
4546
codeNameHandler = "handler"
4647
codeNameHandlerPb = "handler-pb"
4748
codeNameService = "service"
48-
codeNameServiceHTTP = "service-http"
49+
codeNameServiceHTTP = "service-handler"
4950
codeNameHTTP = "http"
5051
codeNameHTTPPb = "http-pb"
5152
codeNameGRPC = "grpc"
@@ -376,7 +377,12 @@ func getNamesFromOutDir(dir string) (moduleName string, serverName string, suite
376377
return "", "", false
377378
}
378379

379-
func saveProtobufFiles(moduleName string, serverName string, outputDir string, protobufFiles []string) error {
380+
func saveProtobufFiles(moduleName string, serverName string, suitedMonoRepo bool, outputDir string, protobufFiles []string) error {
381+
if suitedMonoRepo {
382+
outputDir = strings.TrimSuffix(outputDir, serverName)
383+
outputDir = strings.TrimSuffix(outputDir, gofile.GetPathDelimiter())
384+
}
385+
380386
for _, pbFile := range protobufFiles {
381387
pbContent, err := os.ReadFile(pbFile)
382388
if err != nil {
@@ -390,6 +396,9 @@ func saveProtobufFiles(moduleName string, serverName string, outputDir string, p
390396

391397
_, name := filepath.Split(pbFile)
392398
file := dir + "/" + name
399+
if gofile.IsExists(file) {
400+
return fmt.Errorf("file %s already exists", file)
401+
}
393402
err = os.WriteFile(file, pbContent, 0666)
394403
if err != nil {
395404
return fmt.Errorf("save file %s error, %v", file, err)
@@ -607,21 +616,51 @@ func removeElements(slice []string, elements ...string) []string {
607616
return result
608617
}
609618

610-
func serverCodeFields(outDir string, moduleName string, serverName string) []replacer.Field {
611-
parts := strings.Split(outDir, gofile.GetPathDelimiter())
619+
func moveProtoFileToAPIDir(moduleName string, serverName string, suitedMonoRepo bool, outputDir string) error {
620+
apiDir := outputDir + gofile.GetPathDelimiter() + "api"
621+
protoFiles, _ := gofile.ListFiles(apiDir, gofile.WithNoAbsolutePath(), gofile.WithSuffix(".proto"))
622+
if err := saveProtobufFiles(moduleName, serverName, suitedMonoRepo, outputDir, protoFiles); err != nil {
623+
return err
624+
}
625+
time.Sleep(time.Millisecond * 100)
626+
_ = os.RemoveAll(apiDir)
627+
return nil
628+
}
629+
630+
var (
631+
// for protoc.sh and protoc-doc.sh
632+
monoRepoAPIPath = `bash scripts/init.sh
633+
cd ..
634+
protoBasePath="api"`
635+
// for patch.sh
636+
typePbShellCode = ` if [ ! -d "../api/types" ]; then
637+
sponge patch gen-types-pb --out=./
638+
checkResult $?
639+
mv -f api/types ../api
640+
rmdir api
641+
fi`
642+
dupCodeMark = "--dir=internal/ecode"
643+
adaptDupCode = func(serverType string, serverName string) string {
644+
if serverType == codeNameHTTP {
645+
return dupCodeMark
646+
}
647+
return fmt.Sprintf("--dir=%s/internal/ecode", serverName)
648+
}
649+
)
612650

651+
func serverCodeFields(serverType string, moduleName string, serverName string) []replacer.Field {
613652
return []replacer.Field{
614-
{ // internal initial capital means exportable, external code can be referenced
653+
{
615654
Old: fmt.Sprintf("\"%s/internal/", moduleName),
616-
New: fmt.Sprintf("\"%s/Internal/", moduleName+"/"+serverName),
655+
New: fmt.Sprintf("\"%s/internal/", moduleName+"/"+serverName),
617656
},
618657
{
619-
Old: parts[len(parts)-1] + gofile.GetPathDelimiter() + "internal",
620-
New: parts[len(parts)-1] + gofile.GetPathDelimiter() + "Internal",
658+
Old: "=$(cat docs/gen.info",
659+
New: fmt.Sprintf("=$(cat %s/docs/gen.info", serverName),
621660
},
622661
{
623-
Old: "--dir=internal/ecode",
624-
New: "--dir=Internal/ecode",
662+
Old: dupCodeMark,
663+
New: adaptDupCode(serverType, serverName),
625664
},
626665
{
627666
Old: fmt.Sprintf("\"%s/cmd/", moduleName),
@@ -640,24 +679,50 @@ func serverCodeFields(outDir string, moduleName string, serverName string) []rep
640679
New: fmt.Sprintf("\"%s/api", moduleName+"/"+serverName),
641680
},
642681
{
643-
Old: "vrf internal",
644-
New: "vrf Internal",
682+
Old: "merge_file_name=docs/apis.json",
683+
New: fmt.Sprintf("merge_file_name=%s/docs/apis.json", serverName),
684+
},
685+
{
686+
Old: "--file=docs/apis.swagger.json",
687+
New: fmt.Sprintf("--file=%s/docs/apis.swagger.json", serverName),
688+
},
689+
{
690+
Old: "sponge merge http-pb",
691+
New: fmt.Sprintf("sponge merge http-pb --dir=%s", serverName),
692+
},
693+
{
694+
Old: "sponge merge rpc-pb",
695+
New: fmt.Sprintf("sponge merge rpc-pb --dir=%s", serverName),
696+
},
697+
{
698+
Old: "sponge merge rpc-gw-pb",
699+
New: fmt.Sprintf("sponge merge rpc-gw-pb --dir=%s", serverName),
700+
},
701+
{
702+
Old: "docs/apis.html",
703+
New: fmt.Sprintf("%s/docs/apis.html", serverName),
704+
},
705+
{
706+
Old: `sponge patch gen-types-pb --out=./`,
707+
New: typePbShellCode,
708+
},
709+
{
710+
Old: `protoBasePath="api"`,
711+
New: monoRepoAPIPath,
712+
},
713+
{
714+
Old: fmt.Sprintf("go get %s@", moduleName),
715+
New: fmt.Sprintf("go get %s@", "github.com/zhufuyi/sponge"),
645716
},
646717
}
647718
}
648719

649720
// SubServerCodeFields sub server code fields
650-
func SubServerCodeFields(outDir string, moduleName string, serverName string) []replacer.Field {
651-
parts := strings.Split(outDir, gofile.GetPathDelimiter())
652-
721+
func SubServerCodeFields(moduleName string, serverName string) []replacer.Field {
653722
return []replacer.Field{
654-
{ // internal initial capital means exportable, external code can be referenced
655-
Old: fmt.Sprintf("\"%s/internal/", moduleName),
656-
New: fmt.Sprintf("\"%s/Internal/", moduleName+"/"+serverName),
657-
},
658723
{
659-
Old: parts[len(parts)-1] + gofile.GetPathDelimiter() + "internal",
660-
New: parts[len(parts)-1] + gofile.GetPathDelimiter() + "Internal",
724+
Old: fmt.Sprintf("\"%s/internal/", moduleName),
725+
New: fmt.Sprintf("\"%s/internal/", moduleName+"/"+serverName),
661726
},
662727
{
663728
Old: fmt.Sprintf("\"%s/configs", moduleName),
@@ -667,10 +732,6 @@ func SubServerCodeFields(outDir string, moduleName string, serverName string) []
667732
Old: fmt.Sprintf("\"%s/api", moduleName),
668733
New: fmt.Sprintf("\"%s/api", moduleName+"/"+serverName),
669734
},
670-
{
671-
Old: "vrf internal",
672-
New: "vrf Internal",
673-
},
674735
}
675736
}
676737

@@ -736,3 +797,49 @@ func cutPath(srcFilePath string) string {
736797
srcFilePath = strings.ReplaceAll(srcFilePath, dirPath, ".")
737798
return strings.ReplaceAll(srcFilePath, "\\", "/")
738799
}
800+
801+
func wrapPoint(s string) string {
802+
return "`" + s + "`"
803+
}
804+
805+
func setReadmeTitle(moduleName string, serverName string, serverType string, suitedMonoRepo bool) string {
806+
var repoType string
807+
if suitedMonoRepo {
808+
repoType = "mono-repo"
809+
} else {
810+
if serverType == codeNameHTTP {
811+
repoType = "monolith"
812+
} else {
813+
repoType = "multi-repo"
814+
}
815+
}
816+
817+
return wellPrefix + serverName + fmt.Sprintf(`
818+
819+
| Feature | Value |
820+
| :----------------: | :-----------: |
821+
| Server name | %s |
822+
| Server type | %s |
823+
| Go module name | %s |
824+
| Repository type | %s |
825+
826+
`, wrapPoint(serverName), wrapPoint(serverType), wrapPoint(moduleName), wrapPoint(repoType))
827+
}
828+
829+
// GetGoModFields get go mod fields
830+
func GetGoModFields(moduleName string) []replacer.Field {
831+
return []replacer.Field{
832+
{
833+
Old: "github.com/zhufuyi/sponge",
834+
New: moduleName,
835+
},
836+
{
837+
Old: defaultGoModVersion,
838+
New: getLocalGoVersion(),
839+
},
840+
{
841+
Old: spongeTemplateVersionMark,
842+
New: getLocalSpongeTemplateVersion(),
843+
},
844+
}
845+
}

0 commit comments

Comments
 (0)