feat: área de soporte con webhook de correo y asignación de tickets

This commit is contained in:
Lizandro Guarnizo
2026-07-28 23:39:03 -05:00
parent 772a4a5656
commit 28affb5a55
16 changed files with 957 additions and 34 deletions
+8 -6
View File
@@ -322,8 +322,8 @@ func PortalCrearTicket(c *fiber.Ctx) error {
}
t := &models.ProyectoTicket{
ProyectoID: proy.ID,
PortalUserID: u.ID,
ProyectoID: &proy.ID,
PortalUserID: &u.ID,
AutorNombre: u.Nombre,
Titulo: req.Titulo,
Descripcion: req.Descripcion,
@@ -361,7 +361,7 @@ func PortalResponderTicket(c *fiber.Ctx) error {
if err != nil {
return c.Status(404).JSON(fiber.Map{"error": "Ticket no encontrado"})
}
if ticket.PortalUserID != u.ID {
if ticket.PortalUserID == nil || *ticket.PortalUserID != u.ID {
return c.Status(403).JSON(fiber.Map{"error": "Sin acceso"})
}
msg := &models.TicketMensaje{
@@ -375,8 +375,10 @@ func PortalResponderTicket(c *fiber.Ctx) error {
}
go func() {
proyNombre := ""
if proy, err := models.GetProyectoByID(ticket.ProyectoID); err == nil {
proyNombre = proy.Nombre
if ticket.ProyectoID != nil {
if proy, err := models.GetProyectoByID(*ticket.ProyectoID); err == nil {
proyNombre = proy.Nombre
}
}
services.DispatchTicketRespuestaCliente(ticket, req.Contenido, proyNombre)
}()
@@ -548,7 +550,7 @@ func PortalMarcarTicketLeido(c *fiber.Ctx) error {
if err != nil || ticket == nil {
return c.Status(404).JSON(fiber.Map{"error": "ticket no encontrado"})
}
if ticket.PortalUserID != u.ID {
if ticket.PortalUserID == nil || *ticket.PortalUserID != u.ID {
return c.Status(403).JSON(fiber.Map{"error": "sin permiso"})
}
_ = models.MarkTicketMessagesReadByPortal(uint(ticketID))