feat: update auto render
This commit is contained in:
@@ -54,7 +54,7 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Initialize renderer
|
||||
// Keep using original renderer, now integrated with new template system
|
||||
renderer, err := template.NewRenderer(svc, cfg)
|
||||
if err != nil {
|
||||
slog.Error("failed to initialize renderer", "error", err)
|
||||
|
||||
160
cmd/template_system/main.go
Normal file
160
cmd/template_system/main.go
Normal file
@@ -0,0 +1,160 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"github.com/gofiber/fiber/v3/middleware/logger"
|
||||
"github.com/gofiber/fiber/v3/middleware/recover"
|
||||
"github.com/gofiber/fiber/v3/middleware/static"
|
||||
|
||||
"github.com/rogeecn/database_render/internal/template"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Initialize logging
|
||||
// slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||
|
||||
// Create template loader
|
||||
config := template.TemplateConfig{
|
||||
BuiltinPath: "./web/templates/builtin",
|
||||
CustomPath: "./web/templates/custom",
|
||||
CacheEnabled: true,
|
||||
HotReload: true,
|
||||
}
|
||||
|
||||
loader := template.NewTemplateLoader(config)
|
||||
defer func() {
|
||||
if loader.HotReload != nil {
|
||||
loader.HotReload.Stop()
|
||||
}
|
||||
}()
|
||||
|
||||
// Create Fiber app
|
||||
app := fiber.New()
|
||||
|
||||
// Middleware
|
||||
app.Use(recover.New())
|
||||
app.Use(logger.New())
|
||||
app.Use(static.New("./web/static"))
|
||||
|
||||
// API routes
|
||||
setupAPIRoutes(app, loader)
|
||||
|
||||
// Start server
|
||||
port := ":8080"
|
||||
fmt.Printf("Template system server starting on http://localhost%s\n", port)
|
||||
if err := app.Listen(port); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func setupAPIRoutes(app *fiber.App, loader *template.TemplateLoader) {
|
||||
// Template API routes
|
||||
api := app.Group("/api/templates")
|
||||
|
||||
// Get available templates
|
||||
api.Get("/available", func(c fiber.Ctx) error {
|
||||
table := c.Query("table", "default")
|
||||
templates, err := loader.GetAvailableTemplates(table)
|
||||
if err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
return c.JSON(fiber.Map{"templates": templates})
|
||||
})
|
||||
|
||||
// Get template configuration
|
||||
api.Get("/config", func(c fiber.Ctx) error {
|
||||
config, err := loader.ConfigLoader.LoadTemplateConfig()
|
||||
if err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
return c.JSON(config)
|
||||
})
|
||||
|
||||
// Get version history
|
||||
api.Get("/versions/:template", func(c fiber.Ctx) error {
|
||||
templateName := c.Params("template")
|
||||
history, err := loader.VersionManager.GetVersionHistory(templateName)
|
||||
if err != nil {
|
||||
return c.Status(404).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
return c.JSON(history)
|
||||
})
|
||||
|
||||
// Create new version
|
||||
api.Post("/versions/:template", func(c fiber.Ctx) error {
|
||||
templateName := c.Params("template")
|
||||
var request struct {
|
||||
Description string `json:"description"`
|
||||
Author string `json:"author"`
|
||||
}
|
||||
if err := c.Bind().JSON(&request); err != nil {
|
||||
return c.Status(400).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
templatePath := fmt.Sprintf("./web/templates/custom/%s.html", templateName)
|
||||
if err := loader.VersionManager.SaveVersion(templateName, templatePath, request.Description, request.Author); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{"message": "Version saved successfully"})
|
||||
})
|
||||
|
||||
// Rollback to version
|
||||
api.Post("/versions/:template/rollback/:version", func(c fiber.Ctx) error {
|
||||
templateName := c.Params("template")
|
||||
version := c.Params("version")
|
||||
|
||||
if err := loader.VersionManager.Rollback(templateName, version); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{"message": "Rollback successful"})
|
||||
})
|
||||
|
||||
// Get template stats
|
||||
api.Get("/stats", func(c fiber.Ctx) error {
|
||||
stats := loader.VersionManager.GetVersionSummary()
|
||||
return c.JSON(stats)
|
||||
})
|
||||
|
||||
// Hot reload status
|
||||
api.Get("/hotreload/status", func(c fiber.Ctx) error {
|
||||
if loader.HotReload == nil {
|
||||
return c.JSON(fiber.Map{"status": "disabled"})
|
||||
}
|
||||
|
||||
stats := loader.HotReload.GetReloadStats()
|
||||
return c.JSON(stats)
|
||||
})
|
||||
|
||||
// Manual reload
|
||||
api.Post("/hotreload/reload", func(c fiber.Ctx) error {
|
||||
if loader.HotReload != nil {
|
||||
loader.HotReload.ReloadTemplates()
|
||||
}
|
||||
loader.ClearCache()
|
||||
return c.JSON(fiber.Map{"message": "Templates reloaded"})
|
||||
})
|
||||
|
||||
// Health check
|
||||
api.Get("/health", func(c fiber.Ctx) error {
|
||||
health := map[string]interface{}{
|
||||
"status": "healthy",
|
||||
"timestamp": time.Now(),
|
||||
}
|
||||
|
||||
if loader.VersionManager != nil {
|
||||
health["version_manager"] = loader.VersionManager.GetHealth()
|
||||
}
|
||||
|
||||
if loader.HotReload != nil {
|
||||
health["hot_reload"] = loader.HotReload.GetReloadStats()
|
||||
}
|
||||
|
||||
return c.JSON(health)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user