This commit is contained in:
Lizandro Guarnizo
2026-05-15 21:01:30 -05:00
parent 5555514929
commit 5ec5595196
13 changed files with 788 additions and 9 deletions
@@ -0,0 +1,65 @@
package controllers
import (
"github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)
// ─── Configuración de canales de notificación ─────────────────────────────────
func NotifConfigIndex(c *fiber.Ctx) error {
return c.Render("notif_config", fiber.Map{
"user": c.Locals("user"),
"modules": c.Locals("userModules"),
}, "layouts/main")
}
func GetNotifConfigs(c *fiber.Ctx) error {
items, err := models.GetAllNotifConfigs()
if err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(items)
}
func SaveNotifConfig(c *fiber.Ctx) error {
var cfg models.NotifEventoConfig
if err := c.BodyParser(&cfg); err != nil {
return c.Status(400).JSON(fiber.Map{"error": err.Error()})
}
if cfg.Evento == "" || cfg.Destinatario == "" {
return c.Status(400).JSON(fiber.Map{"error": "evento y destinatario son requeridos"})
}
if err := models.UpsertNotifConfig(&cfg); err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(fiber.Map{"ok": true})
}
// ─── Notificaciones in-app (sistema) ─────────────────────────────────────────
// GetMisNotifs devuelve notificaciones del admin autenticado (tipo_usuario=admin, usuario_id=0).
func GetMisNotifs(c *fiber.Ctx) error {
soloNoLeidas := c.Query("no_leidas") == "1"
items, err := models.GetSistemaNotifs("admin", 0, soloNoLeidas)
if err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
count := models.CountUnreadNotifs("admin", 0)
return c.JSON(fiber.Map{"items": items, "unread": count})
}
func MarcarNotifLeida(c *fiber.Ctx) error {
id, _ := c.ParamsInt("id")
if err := models.MarcarNotifLeida(uint(id)); err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(fiber.Map{"ok": true})
}
func MarcarTodasLeidas(c *fiber.Ctx) error {
if err := models.MarcarTodasLeidas("admin", 0); err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
return c.JSON(fiber.Map{"ok": true})
}
+3
View File
@@ -9,6 +9,7 @@ import (
"github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/pkg/auth"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
"github.com/sujit-baniya/fiber-boilerplate/pkg/services"
"github.com/sujit-baniya/fiber-boilerplate/rest/middlewares"
)
@@ -228,6 +229,7 @@ func PortalCrearTicket(c *fiber.Ctx) error {
if err := models.CreateProyectoTicket(t); err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
go services.DispatchTicketNuevo(t, u, proy.Nombre)
return c.Status(201).JSON(t)
}
@@ -262,6 +264,7 @@ func PortalResponderTicket(c *fiber.Ctx) error {
if err := models.CreateTicketMensaje(msg); err != nil {
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
}
go services.DispatchTicketRespuestaCliente(ticket, req.Contenido, ticket.Proyecto.Nombre)
return c.Status(201).JSON(msg)
}
+6
View File
@@ -12,6 +12,7 @@ import (
"github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
"github.com/sujit-baniya/fiber-boilerplate/pkg/services"
)
// ─── Admin pages ──────────────────────────────────────────────────────────────
@@ -458,6 +459,11 @@ func AdminResponderTicket(c *fiber.Ctx) error {
}
// Cambiar estado a en_progreso si estaba abierto
_ = models.UpdateTicketEstado(uint(ticketID), "en_progreso")
// Notificar al portal user
ticket, _ := models.GetTicketByID(uint(ticketID))
if ticket != nil {
go services.DispatchTicketRespuestaAdmin(ticket, req.Contenido, ticket.Proyecto.Nombre)
}
return c.Status(201).JSON(msg)
}