@@ -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