Files
atomctl/pkg/ast/route/render.go
2025-12-17 23:42:40 +08:00

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
}