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