Fix Dart API generation bugs; Add ability to generate API for path parameters (#2887)
* Fix bug in dartgen: Import path should match the generated api filename * Use Route.HandlerName as generated dart API function name Reasons: - There is bug when using url path name as function name, because it may have invalid characters such as ":" - Switching to HandlerName aligns with other languages such as typescript generation * [DartGen] Add ability to generate api for url path parameters such as /path/:param
This commit is contained in:
@@ -11,6 +11,18 @@ import (
|
||||
"github.com/zeromicro/go-zero/tools/goctl/api/util"
|
||||
)
|
||||
|
||||
const (
|
||||
formTagKey = "form"
|
||||
pathTagKey = "path"
|
||||
headerTagKey = "header"
|
||||
)
|
||||
|
||||
func normalizeHandlerName(handlerName string) string {
|
||||
handler := strings.Replace(handlerName, "Handler", "", 1)
|
||||
handler = lowCamelCase(handler)
|
||||
return handler
|
||||
}
|
||||
|
||||
func lowCamelCase(s string) string {
|
||||
if len(s) < 1 {
|
||||
return ""
|
||||
@@ -20,21 +32,6 @@ func lowCamelCase(s string) string {
|
||||
return util.ToLower(s[:1]) + s[1:]
|
||||
}
|
||||
|
||||
func pathToFuncName(path string) string {
|
||||
if !strings.HasPrefix(path, "/") {
|
||||
path = "/" + path
|
||||
}
|
||||
if !strings.HasPrefix(path, "/api") {
|
||||
path = "/api" + path
|
||||
}
|
||||
|
||||
path = strings.Replace(path, "/", "_", -1)
|
||||
path = strings.Replace(path, "-", "_", -1)
|
||||
|
||||
camel := util.ToCamelCase(path)
|
||||
return util.ToLower(camel[:1]) + camel[1:]
|
||||
}
|
||||
|
||||
func getBaseName(str string) string {
|
||||
return path.Base(str)
|
||||
}
|
||||
@@ -170,3 +167,40 @@ func primitiveType(tp string) (string, bool) {
|
||||
|
||||
return "", false
|
||||
}
|
||||
|
||||
func hasUrlPathParams(route spec.Route) bool {
|
||||
ds, ok := route.RequestType.(spec.DefineStruct)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
return len(route.RequestTypeName()) > 0 && len(ds.GetTagMembers(pathTagKey)) > 0
|
||||
}
|
||||
|
||||
func extractPositionalParamsFromPath(route spec.Route) string {
|
||||
ds, ok := route.RequestType.(spec.DefineStruct)
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
|
||||
var params []string
|
||||
for _, member := range ds.GetTagMembers(pathTagKey) {
|
||||
params = append(params, fmt.Sprintf("%s %s", member.Type.Name(), getPropertyFromMember(member)))
|
||||
}
|
||||
|
||||
return strings.Join(params, ", ")
|
||||
}
|
||||
|
||||
func makeDartRequestUrlPath(route spec.Route) string {
|
||||
path := route.Path
|
||||
ds, ok := route.RequestType.(spec.DefineStruct)
|
||||
if !ok {
|
||||
return path
|
||||
}
|
||||
|
||||
for _, member := range ds.GetTagMembers(pathTagKey) {
|
||||
path = strings.ReplaceAll(path, ":"+pathTagKey, "${"+getPropertyFromMember(member)+"}")
|
||||
}
|
||||
|
||||
return `"` + path + `"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user