feat: update auto render

This commit is contained in:
2025-08-07 20:03:53 +08:00
parent fd67864247
commit d7e8ca38f8
39 changed files with 5684 additions and 130 deletions

View File

@@ -14,6 +14,7 @@ import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/static"
"github.com/rogeecn/database_render/internal/config"
"github.com/rogeecn/database_render/internal/model"
"github.com/rogeecn/database_render/internal/service"
)
@@ -204,29 +205,81 @@ func (r *Renderer) RenderList(c fiber.Ctx, tableName string) error {
// Prepare template data
templateData := map[string]interface{}{
"Table": tableName,
"TableAlias": tableConfig.Alias,
"Columns": data.Columns,
"Data": data.Data,
"Total": data.Total,
"Page": data.Page,
"PerPage": data.PerPage,
"Pages": data.Pages,
"Search": search,
"SortField": sortField,
"SortOrder": sortOrder,
"Tables": tables,
"CurrentPath": c.Path(),
"StartRecord": startRecord,
"EndRecord": endRecord,
"LastUpdate": time.Now().Format("2006-01-02 15:04:05"),
"Table": tableName,
"TableAlias": tableConfig.Alias,
"Columns": data.Columns,
"Data": data.Data,
"Total": data.Total,
"Page": data.Page,
"PerPage": data.PerPage,
"Pages": data.Pages,
"Search": search,
"SortField": sortField,
"SortOrder": sortOrder,
"Tables": tables,
"CurrentPath": c.Path(),
"StartRecord": startRecord,
"EndRecord": endRecord,
"LastUpdate": time.Now().Format("2006-01-02 15:04:05"),
"TemplateType": "table", // Default to table view
}
// set content-type html
c.Response().Header.Set("Content-Type", "text/html; charset=utf-8")
// Render template
return r.templates.ExecuteTemplate(c.Response().BodyWriter(), "list.html", templateData)
// Use new template system for rendering
absBuiltinPath, _ := filepath.Abs("./web/templates/builtin")
absCustomPath, _ := filepath.Abs("./web/templates/custom")
loader := NewTemplateLoader(TemplateConfig{
BuiltinPath: absBuiltinPath,
CustomPath: absCustomPath,
CacheEnabled: true,
})
// Debug the data structure safely
r.logger.Info("template data structure",
"data_type", fmt.Sprintf("%T", templateData["Data"]),
"columns_type", fmt.Sprintf("%T", templateData["Columns"]),
)
// Check data length safely
var dataLength int
if data, ok := templateData["Data"].([]map[string]interface{}); ok {
dataLength = len(data)
} else if data, ok := templateData["Data"].([]interface{}); ok {
dataLength = len(data)
}
var columnsLength int
if cols, ok := templateData["Columns"].([]model.ColumnConfig); ok {
columnsLength = len(cols)
} else if cols, ok := templateData["Columns"].([]interface{}); ok {
columnsLength = len(cols)
}
r.logger.Info("data lengths", "data_length", dataLength, "columns_length", columnsLength)
// Try complete template - standalone template without layout inheritance
tmpl, err := loader.LoadTemplate("complete", tableName)
if err != nil {
r.logger.Error("failed to load complete template", "error", err)
// Fallback to simple template
tmpl, err = loader.LoadTemplate("simple", tableName)
if err != nil {
r.logger.Error("failed to load simple template", "error", err)
return r.templates.ExecuteTemplate(c.Response().BodyWriter(), "list.html", templateData)
}
}
r.logger.Info("executing template", "template", "debug/simple")
err = tmpl.Execute(c.Response().BodyWriter(), templateData)
if err != nil {
r.logger.Error("failed to execute template", "error", err)
return r.templates.ExecuteTemplate(c.Response().BodyWriter(), "list.html", templateData)
}
return nil
}
// RenderIndex renders the index page