163 lines
4.2 KiB
Go
163 lines
4.2 KiB
Go
package controllers
|
|
|
|
import (
|
|
"math"
|
|
"strconv"
|
|
|
|
"github.com/gofiber/fiber/v2" //nolint:goimports
|
|
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
|
|
)
|
|
|
|
// RENDER
|
|
func Modules(c *fiber.Ctx) error {
|
|
// Renderiza la vista "modules" con el layout "layouts/landing"
|
|
// Renderizar la vista "roles" y pasar los datos al frontend
|
|
data := fiber.Map{
|
|
"user": c.Locals("user").(map[string]interface{}),
|
|
"modules": c.Locals("userModules"),
|
|
}
|
|
|
|
if err := c.Render("modules", data, "layouts/main"); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"message": "Error rendering template",
|
|
"error": err.Error(),
|
|
})
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//CONSULTAR TODOS LOS MODULOS
|
|
|
|
func GetModules(c *fiber.Ctx) error {
|
|
// Obtener parámetros de consulta para la paginación
|
|
pageStr := c.Query("page", "1") // Por defecto, la página es 1
|
|
page, err := strconv.Atoi(pageStr)
|
|
if err != nil || page < 1 {
|
|
page = 1
|
|
}
|
|
|
|
searchQuery := c.Query("search", "") // Obtener el término de búsqueda
|
|
limit := 10 // Número de módulos por página
|
|
offset := (page - 1) * limit
|
|
|
|
// Llama a AllModules con el término de búsqueda
|
|
modules, total, err := models.AllModules(limit, offset, searchQuery)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"message": "Error retrieving modules",
|
|
"error": err.Error(),
|
|
})
|
|
}
|
|
|
|
// Calcular el total de páginas
|
|
totalPages := int(math.Ceil(float64(total) / float64(limit)))
|
|
|
|
// Envía los módulos como respuesta JSON junto con la información de paginación
|
|
return c.JSON(fiber.Map{
|
|
"modules": modules,
|
|
"total": total, // Total de módulos disponibles
|
|
"totalPages": totalPages, // Total de páginas
|
|
"page": page, // Página actual
|
|
"limit": limit, // Límites por página
|
|
})
|
|
}
|
|
|
|
func AllModulesSelect(c *fiber.Ctx) error {
|
|
modules, err := models.AllModulesWithSubmodules()
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"message": "Error retrieving modules",
|
|
"error": err.Error(),
|
|
})
|
|
}
|
|
|
|
return c.JSON(fiber.Map{
|
|
"modules": modules,
|
|
})
|
|
}
|
|
|
|
// ACTUALIZAR
|
|
func UpdateModule(c *fiber.Ctx) error {
|
|
var m models.Modules
|
|
uid, err := strconv.ParseUint(c.Params("id"), 10, 32)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"message": "ID inválido",
|
|
"error": true,
|
|
})
|
|
}
|
|
|
|
// Analiza el cuerpo de la solicitud
|
|
if err := c.BodyParser(&m); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"message": "Error al analizar el cuerpo de la solicitud",
|
|
"error": true,
|
|
})
|
|
}
|
|
|
|
m.ID = uint(uid)
|
|
|
|
// Actualiza el módulo en la base de datos
|
|
if err := models.UpdateModule(m); err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"message": err.Error(),
|
|
"error": true,
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
|
"message": "Módulo actualizado con éxito",
|
|
"error": false,
|
|
"module": m,
|
|
})
|
|
}
|
|
|
|
// CREAR
|
|
func CreateModule(c *fiber.Ctx) error {
|
|
var m models.Modules
|
|
|
|
// Analiza el cuerpo de la solicitud
|
|
if err := c.BodyParser(&m); err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"message": "Error al analizar el cuerpo de la solicitud",
|
|
"error": true,
|
|
})
|
|
}
|
|
|
|
// Crea el nuevo módulo en la base de datos
|
|
if err := models.CreateModule(m); err != nil { // Asegúrate de tener una función para crear un módulo
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"message": err.Error(),
|
|
"error": true,
|
|
})
|
|
}
|
|
|
|
return c.Status(fiber.StatusCreated).JSON(fiber.Map{
|
|
"message": "Módulo creado con éxito",
|
|
"error": false,
|
|
"module": m,
|
|
})
|
|
}
|
|
|
|
// ELIMINAR
|
|
func DeleteModule(c *fiber.Ctx) error {
|
|
uid, err := strconv.ParseUint(c.Params("id"), 10, 32)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
|
"message": "Invalid ID",
|
|
"error": true,
|
|
})
|
|
}
|
|
|
|
if err := models.DeleteModule(uint(uid)); err != nil { // Ensure you have a function for deleting a module
|
|
return c.JSON(fiber.Map{
|
|
"message": err.Error(),
|
|
"error": true,
|
|
})
|
|
}
|
|
return c.JSON(fiber.Map{
|
|
"message": "Modulo eliminado correctamente",
|
|
"error": false,
|
|
})
|
|
}
|