70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package route
|
|
|
|
import (
|
|
_ "embed"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"go.ipao.vip/atomctl/v2/pkg/utils/gomod"
|
|
)
|
|
|
|
//go:embed router.go.tpl
|
|
var routeTpl string
|
|
|
|
//go:embed manual.go.tpl
|
|
var routeManualTpl string
|
|
|
|
type RenderData struct {
|
|
PackageName string
|
|
ModuleName string
|
|
ProjectPackage string
|
|
Imports []string
|
|
Controllers []string
|
|
Routes map[string][]Router
|
|
RouteGroups []string
|
|
}
|
|
|
|
type Router struct {
|
|
Method string
|
|
Route string
|
|
Controller string
|
|
Action string
|
|
Func string
|
|
Params []string
|
|
}
|
|
|
|
func Render(path string, routes []RouteDefinition) error {
|
|
routePath := filepath.Join(path, "routes.gen.go")
|
|
routeManualPath := filepath.Join(path, "routes.manual.go")
|
|
|
|
data, err := buildRenderData(RenderBuildOpts{
|
|
PackageName: filepath.Base(path),
|
|
ModuleName: gomod.GetModuleName(),
|
|
ProjectPackage: gomod.GetModuleName(),
|
|
Routes: routes,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
out, err := renderTemplate(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := os.WriteFile(routePath, out, 0o644); err != nil {
|
|
return err
|
|
}
|
|
// if routes.manual.go not exists then create it
|
|
if _, err := os.Stat(routeManualPath); os.IsNotExist(err) {
|
|
manualOut, err := renderManualTemplate(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := os.WriteFile(routeManualPath, manualOut, 0o644); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|