complete route generator
This commit is contained in:
@@ -16,35 +16,40 @@ type RenderBuildOpts struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func buildRenderData(opts RenderBuildOpts) (RenderData, error) {
|
func buildRenderData(opts RenderBuildOpts) (RenderData, error) {
|
||||||
rd := RenderData{
|
rd := RenderData{
|
||||||
PackageName: opts.PackageName,
|
PackageName: opts.PackageName,
|
||||||
ProjectPackage: opts.ProjectPackage,
|
ProjectPackage: opts.ProjectPackage,
|
||||||
Imports: []string{},
|
Imports: []string{},
|
||||||
Controllers: []string{},
|
Controllers: []string{},
|
||||||
Routes: make(map[string][]Router),
|
Routes: make(map[string][]Router),
|
||||||
RouteGroups: []string{},
|
RouteGroups: []string{},
|
||||||
}
|
}
|
||||||
|
|
||||||
imports := []string{}
|
imports := []string{}
|
||||||
controllers := []string{}
|
controllers := []string{}
|
||||||
|
// Track if any param uses model lookup, which requires the field package.
|
||||||
|
needsFieldImport := false
|
||||||
|
|
||||||
for _, route := range opts.Routes {
|
for _, route := range opts.Routes {
|
||||||
imports = append(imports, route.Imports...)
|
imports = append(imports, route.Imports...)
|
||||||
controllers = append(controllers, fmt.Sprintf("%s *%s", strcase.ToLowerCamel(route.Name), route.Name))
|
controllers = append(controllers, fmt.Sprintf("%s *%s", strcase.ToLowerCamel(route.Name), route.Name))
|
||||||
|
|
||||||
for _, action := range route.Actions {
|
for _, action := range route.Actions {
|
||||||
funcName := fmt.Sprintf("Func%d", len(action.Params))
|
funcName := fmt.Sprintf("Func%d", len(action.Params))
|
||||||
if action.HasData {
|
if action.HasData {
|
||||||
funcName = "Data" + funcName
|
funcName = "Data" + funcName
|
||||||
}
|
}
|
||||||
|
|
||||||
params := lo.FilterMap(action.Params, func(item ParamDefinition, _ int) (string, bool) {
|
params := lo.FilterMap(action.Params, func(item ParamDefinition, _ int) (string, bool) {
|
||||||
tok := buildParamToken(item)
|
tok := buildParamToken(item)
|
||||||
if tok == "" {
|
if tok == "" {
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
return tok, true
|
if item.Model != "" {
|
||||||
})
|
needsFieldImport = true
|
||||||
|
}
|
||||||
|
return tok, true
|
||||||
|
})
|
||||||
|
|
||||||
rd.Routes[route.Name] = append(rd.Routes[route.Name], Router{
|
rd.Routes[route.Name] = append(rd.Routes[route.Name], Router{
|
||||||
Method: strcase.ToCamel(action.Method),
|
Method: strcase.ToCamel(action.Method),
|
||||||
@@ -55,13 +60,18 @@ func buildRenderData(opts RenderBuildOpts) (RenderData, error) {
|
|||||||
Params: params,
|
Params: params,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// de-dup and sort imports/controllers for stable output
|
// Add field import if any model lookups are used
|
||||||
rd.Imports = lo.Uniq(imports)
|
if needsFieldImport {
|
||||||
sort.Strings(rd.Imports)
|
imports = append(imports, `field "go.ipao.vip/gen/field"`)
|
||||||
rd.Controllers = lo.Uniq(controllers)
|
}
|
||||||
sort.Strings(rd.Controllers)
|
|
||||||
|
// de-dup and sort imports/controllers for stable output
|
||||||
|
rd.Imports = lo.Uniq(imports)
|
||||||
|
sort.Strings(rd.Imports)
|
||||||
|
rd.Controllers = lo.Uniq(controllers)
|
||||||
|
sort.Strings(rd.Controllers)
|
||||||
|
|
||||||
// stable order for route groups and entries
|
// stable order for route groups and entries
|
||||||
for k := range rd.Routes {
|
for k := range rd.Routes {
|
||||||
|
|||||||
Reference in New Issue
Block a user