Files
soft_usite/rest/controllers/prov_servidor_controller.go
Lizandro GuarnizoandCopilot b4b60810a1 feat(prov_servidor): add many2many integrations linking
- ProvServidor model: add Integraciones []Submodules (many2many:prov_servidor_submodules)
- GetAllProvServidor: preload Integraciones
- SetProvServidorIntegraciones: new model func to replace associations
- New endpoint PUT /app/provservidor/:id/integraciones
- GetSubmodules: support ?limit= query param
- prov_servidor.html: show integrations as badges in table, view modal,
  and edit modal with checkboxes to select one or more existing submodules

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-21 10:34:01 -05:00

141 lines
3.5 KiB
Go
Executable File

package controllers
import (
"strconv"
"github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)
// RENDER
func ProvServidor(c *fiber.Ctx) error {
data := fiber.Map{
"user": c.Locals("user").(map[string]interface{}),
"modules": c.Locals("userModules"),
}
if err := c.Render("prov_servidor", data, "layouts/main"); err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error rendering template",
"error": err.Error(),
})
}
return nil
}
func GetProvServidor(c *fiber.Ctx) error {
searchQuery := c.Query("search", "")
records, total, err := models.GetAllProvServidor(searchQuery)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error retrieving records",
"error": err.Error(),
})
}
return c.JSON(fiber.Map{
"registros": records,
"total": total,
"totalPages": 1,
})
}
func CreateProvServidor(c *fiber.Ctx) error {
var m models.ProvServidor
if err := c.BodyParser(&m); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"message": "Error parsing request body",
"error": err.Error(),
})
}
if err := models.CreateProvServidor(m); err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error creating proveedor de servidor",
"error": err.Error(),
})
}
return c.Status(fiber.StatusCreated).JSON(m)
}
func UpdateProvServidor(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": "ID inválido",
"error": err.Error(),
})
}
var m models.ProvServidor
if err := c.BodyParser(&m); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"message": "Error al parsear el cuerpo de la solicitud",
"error": err.Error(),
})
}
m.ID = uint(uid)
if err := models.UpdateProvServidor(m); err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error al actualizar el proveedor de servidor",
"error": err.Error(),
})
}
return c.Status(fiber.StatusOK).JSON(m)
}
func DeleteProvServidor(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": "ID inválido",
"error": err.Error(),
})
}
var m models.ProvServidor
m.ID = uint(uid)
if err := models.DeleteProvServidor(m); err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error al eliminar el proveedor de servidor",
"error": err.Error(),
})
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"message": "Proveedor de servidor eliminado exitosamente",
})
}
func SetProvServidorIntegraciones(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": "ID inválido"})
}
var body struct {
SubmoduleIDs []uint `json:"submodule_ids"`
}
if err := c.BodyParser(&body); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"message": "Error parsing body"})
}
if err := models.SetProvServidorIntegraciones(uint(uid), body.SubmoduleIDs); err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"message": "Error actualizando integraciones",
"error": err.Error(),
})
}
return c.JSON(fiber.Map{"message": "Integraciones actualizadas"})
}