backend-server-v2/internal/controllers/admin_controller.go

72 lines
1.5 KiB
Go

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)
}