Skip to content

Commit e10968a

Browse files
committed
support mongodb generate code
1 parent 0ca5eaf commit e10968a

Some content is hidden

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

63 files changed

+4992
-294
lines changed

cmd/protoc-gen-go-rpc-tmpl/internal/generate/service/template.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ import (
136136
137137
{{- range .PbServices}}
138138
139-
// Test each method of {{.LowerName}} via the rpc client
139+
// Test each method of {{.LowerName}} via the grpc client
140140
func Test_service_{{.LowerName}}_methods(t *testing.T) {
141141
conn := getRPCClientConnForTest()
142142
cli := serverNameExampleV1.New{{.Name}}Client(conn)

cmd/sponge/commands/generate/cache.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ func (g *stringCacheGenerator) generateCode() (string, error) {
120120
ignoreFiles := []string{ // specify the files in the subdirectory to be ignored for processing
121121
"doc.go",
122122
"userExample.go",
123+
"userExample.go.mgo",
123124
"userExample_test.go",
124125
}
125126

cmd/sponge/commands/generate/common.go

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ const (
2929
DBDriverTidb = "tidb"
3030
// DBDriverSqlite sqlite driver
3131
DBDriverSqlite = "sqlite"
32+
// DBDriverMongodb mongodb driver
33+
DBDriverMongodb = "mongodb"
3234
)
3335

3436
var (
@@ -41,10 +43,12 @@ var (
4143
cacheFile = "cache/cacheNameExample.go"
4244

4345
daoFile = "dao/userExample.go"
46+
daoMgoFile = "dao/userExample.go.mgo"
4447
daoFileMark = "// todo generate the update fields code to here"
4548
daoTestFile = "dao/userExample_test.go"
4649

4750
handlerFile = "types/userExample_types.go"
51+
handlerMgoFile = "types/userExample_types.go.mgo"
4852
handlerFileMark = "// todo generate the request and response struct to here"
4953
handlerTestFile = "handler/userExample_test.go"
5054

@@ -57,9 +61,10 @@ var (
5761
protoFile = "v1/userExample.proto"
5862
protoFileMark = "// todo generate the protobuf code here"
5963

60-
serviceTestFile = "service/userExample_test.go"
61-
serviceClientFile = "service/userExample_client_test.go"
62-
serviceFileMark = "// todo generate the service struct code here"
64+
serviceTestFile = "service/userExample_test.go"
65+
serviceClientFile = "service/userExample_client_test.go"
66+
serviceClientMgoFile = "service/userExample_client_test.go.mgo"
67+
serviceFileMark = "// todo generate the service struct code here"
6368

6469
dockerFile = "scripts/build/Dockerfile"
6570
dockerFileMark = "# todo generate dockerfile code for http or grpc here"
@@ -138,7 +143,10 @@ func convertProjectAndServerName(projectName, serverName string) (pn string, sn
138143
return pn, sn
139144
}
140145

141-
func adjustmentOfIDType(handlerCodes string) string {
146+
func adjustmentOfIDType(handlerCodes string, dbDriver string) string {
147+
if dbDriver == DBDriverMongodb {
148+
return idTypeToStr(handlerCodes)
149+
}
142150
return idTypeToStr(idTypeFixToUint64(handlerCodes))
143151
}
144152

@@ -374,33 +382,6 @@ func replacePackage(data []byte, moduleName string, serverName string) []byte {
374382
return data
375383
}
376384

377-
//func getDBConfigCode(dbDriver string, forDeployment ...bool) string {
378-
// isDeployment := false
379-
// if len(forDeployment) > 0 {
380-
// isDeployment = forDeployment[0]
381-
// }
382-
//
383-
// dbConfigCode := ""
384-
// switch strings.ToLower(dbDriver) {
385-
// case DBDriverMysql, DBDriverTidb:
386-
// if isDeployment {
387-
// dbConfigCode = mysqlConfigForDeploymentCode
388-
// } else {
389-
// dbConfigCode = mysqlConfigCode
390-
// }
391-
//
392-
// case DBDriverPostgresql:
393-
// if isDeployment {
394-
// dbConfigCode = postgresqlConfigForDeploymentCode
395-
// } else {
396-
// dbConfigCode = postgresqlConfigCode
397-
// }
398-
// default:
399-
// panic("getDBConfigCode error, unsupported database driver: " + dbDriver)
400-
// }
401-
// return dbConfigCode
402-
//}
403-
404385
func getDBConfigCode(dbDriver string) string {
405386
dbConfigCode := ""
406387
switch strings.ToLower(dbDriver) {
@@ -410,6 +391,8 @@ func getDBConfigCode(dbDriver string) string {
410391
dbConfigCode = postgresqlConfigCode
411392
case DBDriverSqlite:
412393
dbConfigCode = sqliteConfigCode
394+
case DBDriverMongodb:
395+
dbConfigCode = mongodbConfigCode
413396
default:
414397
panic("getDBConfigCode error, unsupported database driver: " + dbDriver)
415398
}
@@ -425,6 +408,8 @@ func getInitDBCode(dbDriver string) string {
425408
initDBCode = modelInitDBFilePostgresqlCode
426409
case DBDriverSqlite:
427410
initDBCode = modelInitDBFileSqliteCode
411+
case DBDriverMongodb:
412+
initDBCode = "" // do nothing
428413
default:
429414
panic("getInitDBCode error, unsupported database driver: " + dbDriver)
430415
}
@@ -509,3 +494,13 @@ func sqliteDSNAdaptation(dbDriver string, dsn string) string {
509494
}
510495
return dsn
511496
}
497+
498+
func removeElement(slice []string, element string) []string {
499+
result := make([]string, 0, len(slice)-1)
500+
for _, s := range slice {
501+
if s != element {
502+
result = append(result, s)
503+
}
504+
}
505+
return result
506+
}

cmd/sponge/commands/generate/dao.go

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ func DaoCommand(parentName string) *cobra.Command {
2929

3030
cmd := &cobra.Command{
3131
Use: "dao",
32-
Short: "Generate dao code based on mysql table",
33-
Long: fmt.Sprintf(`generate dao code based on mysql table.
32+
Short: "Generate dao code based on sql",
33+
Long: fmt.Sprintf(`generate dao code based on sql.
3434
3535
Examples:
3636
# generate dao code and embed gorm.model struct.
@@ -61,6 +61,9 @@ Examples:
6161
continue
6262
}
6363

64+
if sqlArgs.DBDriver == DBDriverMongodb {
65+
sqlArgs.IsEmbed = false
66+
}
6467
sqlArgs.DBTable = tableName
6568
codes, err := sql2code.Generate(&sqlArgs)
6669
if err != nil {
@@ -76,6 +79,7 @@ Examples:
7679

7780
g := &daoGenerator{
7881
moduleName: moduleName,
82+
dbDriver: sqlArgs.DBDriver,
7983
isIncludeInitDB: isIncludeInitDB,
8084
codes: codes,
8185
outPath: outPath,
@@ -98,7 +102,7 @@ using help:
98102

99103
cmd.Flags().StringVarP(&moduleName, "module-name", "m", "", "module-name is the name of the module in the go.mod file")
100104
//_ = cmd.MarkFlagRequired("module-name")
101-
cmd.Flags().StringVarP(&sqlArgs.DBDriver, "db-driver", "k", "mysql", "database driver, support mysql, postgresql, tidb, sqlite")
105+
cmd.Flags().StringVarP(&sqlArgs.DBDriver, "db-driver", "k", "mysql", "database driver, support mysql, mongodb, postgresql, tidb, sqlite")
102106
cmd.Flags().StringVarP(&sqlArgs.DBDsn, "db-dsn", "d", "", "database content address, e.g. user:password@(host:port)/database. Note: if db-driver=sqlite, db-dsn must be a local sqlite db file, e.g. --db-dsn=/tmp/sponge_sqlite.db") //nolint
103107
_ = cmd.MarkFlagRequired("db-dsn")
104108
cmd.Flags().StringVarP(&dbTables, "db-table", "t", "", "table name, multiple names separated by commas")
@@ -114,6 +118,7 @@ using help:
114118

115119
type daoGenerator struct {
116120
moduleName string
121+
dbDriver string
117122
isIncludeInitDB bool
118123
codes map[string]string
119124
outPath string
@@ -131,14 +136,28 @@ func (g *daoGenerator) generateCode() (string, error) {
131136
"internal/model", "internal/cache", "internal/dao",
132137
}
133138
ignoreDirs := []string{} // specify the directory in the subdirectory where processing is ignored
134-
ignoreFiles := []string{ // specify the files in the subdirectory to be ignored for processing
135-
"init.go", "init_test.go", // internal/model
136-
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", // internal/cache
137-
}
138-
if g.isIncludeInitDB {
139-
ignoreFiles = []string{
140-
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", // internal/cache
139+
var ignoreFiles []string
140+
switch strings.ToLower(g.dbDriver) {
141+
case DBDriverMysql, DBDriverPostgresql, DBDriverTidb, DBDriverSqlite:
142+
ignoreFiles = []string{ // specify the files in the subdirectory to be ignored for processing
143+
"init.go", "init_test.go", "init.go.mgo", // internal/model
144+
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", "cache/userExample.go.mgo", // internal/cache
145+
"dao/userExample.go.mgo", // internal/dao
146+
}
147+
if g.isIncludeInitDB {
148+
ignoreFiles = removeElement(ignoreFiles, "init.go")
149+
}
150+
case DBDriverMongodb:
151+
ignoreFiles = []string{ // specify the files in the subdirectory to be ignored for processing
152+
"init.go", "init_test.go", "init.go.mgo", // internal/model
153+
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", "cache/userExample.go", "cache/userExample_test.go", // internal/cache
154+
"dao/userExample_test.go", "dao/userExample.go", // internal/dao
155+
}
156+
if g.isIncludeInitDB {
157+
ignoreFiles = removeElement(ignoreFiles, "init.go.mgo")
141158
}
159+
default:
160+
return "", errors.New("unsupported db driver: " + g.dbDriver)
142161
}
143162

144163
r.SetSubDirsAndFiles(subDirs)
@@ -160,6 +179,7 @@ func (g *daoGenerator) addFields(r replacer.Replacer) []replacer.Field {
160179

161180
fields = append(fields, deleteFieldsMark(r, modelFile, startMark, endMark)...)
162181
fields = append(fields, deleteFieldsMark(r, daoFile, startMark, endMark)...)
182+
fields = append(fields, deleteFieldsMark(r, daoMgoFile, startMark, endMark)...)
163183
fields = append(fields, deleteFieldsMark(r, daoTestFile, startMark, endMark)...)
164184
fields = append(fields, []replacer.Field{
165185
{ // replace the contents of the model/userExample.go file
@@ -182,6 +202,14 @@ func (g *daoGenerator) addFields(r replacer.Replacer) []replacer.Field {
182202
Old: g.moduleName + "/pkg",
183203
New: "github.com/zhufuyi/sponge/pkg",
184204
},
205+
{
206+
Old: "init.go.mgo",
207+
New: "init.go",
208+
},
209+
{
210+
Old: "userExample.go.mgo",
211+
New: "userExample.go",
212+
},
185213
{
186214
Old: "UserExample",
187215
New: g.codes[parser.TableName],

cmd/sponge/commands/generate/handler-pb.go

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ func HandlerPbCommand() *cobra.Command {
3232

3333
cmd := &cobra.Command{
3434
Use: "handler-pb",
35-
Short: "Generate handler and protobuf code based on mysql table",
36-
Long: `generate handler and protobuf code based on mysql table.
35+
Short: "Generate handler and protobuf code based on sql",
36+
Long: `generate handler and protobuf code based on sql.
3737
3838
Examples:
3939
# generate handler and protobuf code and embed gorm.model struct.
@@ -64,6 +64,9 @@ Examples:
6464
}
6565

6666
serverName = convertServerName(serverName)
67+
if sqlArgs.DBDriver == DBDriverMongodb {
68+
sqlArgs.IsEmbed = false
69+
}
6770

6871
tableNames := strings.Split(dbTables, ",")
6972
for _, tableName := range tableNames {
@@ -80,6 +83,7 @@ Examples:
8083
g := &handlerPbGenerator{
8184
moduleName: moduleName,
8285
serverName: serverName,
86+
dbDriver: sqlArgs.DBDriver,
8387
isEmbed: sqlArgs.IsEmbed,
8488
codes: codes,
8589
outPath: outPath,
@@ -107,7 +111,7 @@ using help:
107111
//_ = cmd.MarkFlagRequired("module-name")
108112
cmd.Flags().StringVarP(&serverName, "server-name", "s", "", "server name")
109113
//_ = cmd.MarkFlagRequired("server-name")
110-
cmd.Flags().StringVarP(&sqlArgs.DBDriver, "db-driver", "k", "mysql", "database driver, support mysql, postgresql, tidb, sqlite")
114+
cmd.Flags().StringVarP(&sqlArgs.DBDriver, "db-driver", "k", "mysql", "database driver, support mysql, mongodb, postgresql, tidb, sqlite")
111115
cmd.Flags().StringVarP(&sqlArgs.DBDsn, "db-dsn", "d", "", "database content address, e.g. user:password@(host:port)/database. Note: if db-driver=sqlite, db-dsn must be a local sqlite db file, e.g. --db-dsn=/tmp/sponge_sqlite.db") //nolint
112116
_ = cmd.MarkFlagRequired("db-dsn")
113117
cmd.Flags().StringVarP(&dbTables, "db-table", "t", "", "table name, multiple names separated by commas")
@@ -123,6 +127,7 @@ using help:
123127
type handlerPbGenerator struct {
124128
moduleName string
125129
serverName string
130+
dbDriver string
126131
isEmbed bool
127132
codes map[string]string
128133
outPath string
@@ -143,12 +148,28 @@ func (g *handlerPbGenerator) generateCode() (string, error) {
143148
subDirs := []string{"internal/model", "internal/cache", "internal/dao", "internal/ecode",
144149
"internal/handler", "api/serverNameExample"} // only the specified subdirectory is processed, if empty or no subdirectory is specified, it means all files
145150
ignoreDirs := []string{} // specify the directory in the subdirectory where processing is ignored
146-
ignoreFiles := []string{ // specify the files in the subdirectory to be ignored for processing
147-
"userExample.pb.go", "userExample.pb.validate.go", "userExample_grpc.pb.go", "userExample_router.pb.go", // api/serverNameExample
148-
"systemCode_http.go", "systemCode_rpc.go", "userExample_rpc.go", // internal/ecode
149-
"init.go", "init_test.go", // internal/model
150-
"handler/userExample.go", "handler/userExample_test.go", "handler/userExample_logic_test.go", // internal/handler
151-
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", // internal/cache
151+
var ignoreFiles []string
152+
switch strings.ToLower(g.dbDriver) {
153+
case DBDriverMysql, DBDriverPostgresql, DBDriverTidb, DBDriverSqlite:
154+
ignoreFiles = []string{ // specify the files in the subdirectory to be ignored for processing
155+
"userExample.pb.go", "userExample.pb.validate.go", "userExample_grpc.pb.go", "userExample_router.pb.go", // api/serverNameExample
156+
"systemCode_http.go", "systemCode_rpc.go", "userExample_rpc.go", // internal/ecode
157+
"init.go", "init_test.go", "init.go.mgo", // internal/model
158+
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", "cache/userExample.go.mgo", // internal/cache
159+
"dao/userExample.go.mgo", // internal/dao
160+
"handler/userExample.go", "handler/userExample_test.go", "handler/userExample_logic_test.go", "handler/userExample_logic.go.mgo", // internal/handler
161+
}
162+
case DBDriverMongodb:
163+
ignoreFiles = []string{ // specify the files in the subdirectory to be ignored for processing
164+
"userExample.pb.go", "userExample.pb.validate.go", "userExample_grpc.pb.go", "userExample_router.pb.go", // api/serverNameExample
165+
"systemCode_http.go", "systemCode_rpc.go", "userExample_rpc.go", // internal/ecode
166+
"init.go", "init_test.go", "init.go.mgo", // internal/model
167+
"doc.go", "cacheNameExample.go", "cacheNameExample_test.go", "cache/userExample.go", "cache/userExample_test.go", // internal/cache
168+
"dao/userExample_test.go", "dao/userExample.go", // internal/dao
169+
"handler/userExample.go", "handler/userExample_test.go", "handler/userExample_logic_test.go", "handler/userExample_test.go", "handler/userExample_logic.go", // internal/handler
170+
}
171+
default:
172+
return "", errors.New("unsupported db driver: " + g.dbDriver)
152173
}
153174

154175
r.SetSubDirsAndFiles(subDirs)
@@ -169,6 +190,7 @@ func (g *handlerPbGenerator) addFields(r replacer.Replacer) []replacer.Field {
169190

170191
fields = append(fields, deleteFieldsMark(r, modelFile, startMark, endMark)...)
171192
fields = append(fields, deleteFieldsMark(r, daoFile, startMark, endMark)...)
193+
fields = append(fields, deleteFieldsMark(r, daoMgoFile, startMark, endMark)...)
172194
fields = append(fields, deleteFieldsMark(r, daoTestFile, startMark, endMark)...)
173195
fields = append(fields, deleteFieldsMark(r, handlerLogicFile, startMark, endMark)...)
174196
fields = append(fields, deleteFieldsMark(r, protoFile, startMark, endMark)...)
@@ -219,10 +241,18 @@ func (g *handlerPbGenerator) addFields(r replacer.Replacer) []replacer.Field {
219241
Old: g.moduleName + "/pkg",
220242
New: "github.com/zhufuyi/sponge/pkg",
221243
},
244+
{
245+
Old: "userExample_logic.go.mgo",
246+
New: "userExample.go",
247+
},
222248
{
223249
Old: "userExample_logic.go",
224250
New: "userExample.go",
225251
},
252+
{
253+
Old: "userExample.go.mgo",
254+
New: "userExample.go",
255+
},
226256
{
227257
Old: "UserExamplePb",
228258
New: "UserExample",

0 commit comments

Comments
 (0)