package controllers import ( "html/template" "trustcontact/internal/services" "github.com/gofiber/fiber/v2" ) type AdminController struct { usersService *services.UsersService } func NewAdminController(usersService *services.UsersService) *AdminController { return &AdminController{usersService: usersService} } func (ac *AdminController) Dashboard(c *fiber.Ctx) error { viewData := map[string]any{ "Title": "Admin Dashboard", "NavSection": "admin", } for k, v := range localsTemplateData(c) { viewData[k] = v } tmpl, err := template.ParseFiles( "web/templates/layout.html", "web/templates/public/_flash.html", "web/templates/admin/dashboard.html", ) if err != nil { return err } return executeLayout(c, tmpl, viewData) } func (ac *AdminController) Users(c *fiber.Ctx) error { pageData, err := ac.usersService.List(services.UsersQuery{ Q: c.Query("q"), Sort: c.Query("sort", "id"), Dir: c.Query("dir", "asc"), Page: parseIntOrDefault(c.Query("page"), 1), PageSize: parseIntOrDefault(c.Query("pageSize"), 20), }) if err != nil { return err } viewData := map[string]any{ "Title": "Admin Users", "NavSection": "admin", "PageData": pageData, } for k, v := range localsTemplateData(c) { viewData[k] = v } tmpl, err := template.ParseFiles( "web/templates/layout.html", "web/templates/public/_flash.html", "web/templates/admin/users.html", ) if err != nil { return err } return executeLayout(c, tmpl, viewData) }