up
This commit is contained in:
@@ -2,23 +2,19 @@ package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"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"
|
||||
)
|
||||
|
||||
// ─── Auth ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
func PortalLoginPage(c *fiber.Ctx) error {
|
||||
// Usar PortalUser (validación completa) en vez de IsPortalLoggedIn (solo key)
|
||||
// para evitar loops cuando hay sesión obsoleta pero el usuario ya no existe en DB.
|
||||
if user, err := auth.PortalUser(c); err == nil && user != nil {
|
||||
if auth.IsPortalLoggedIn(c) {
|
||||
return c.Redirect("/portal/dashboard")
|
||||
}
|
||||
return c.Render("portal/login", fiber.Map{
|
||||
@@ -31,14 +27,11 @@ func PortalLoginPost(c *fiber.Ctx) error {
|
||||
password := c.FormValue("password")
|
||||
u, err := models.CheckPortalLogin(email, password)
|
||||
if err != nil {
|
||||
log.Printf("[PORTAL LOGIN] Fallo para %q: %v", email, err)
|
||||
return c.Redirect("/portal/login?error=" + url.QueryEscape(err.Error()))
|
||||
}
|
||||
if err := auth.SetPortalSession(c, u.ID); err != nil {
|
||||
log.Printf("[PORTAL LOGIN] Error guardando sesión para usuario %d: %v", u.ID, err)
|
||||
return c.Redirect("/portal/login?error=Error+interno")
|
||||
}
|
||||
log.Printf("[PORTAL LOGIN] OK usuario %d (%s)", u.ID, email)
|
||||
return c.Redirect("/portal/dashboard")
|
||||
}
|
||||
|
||||
@@ -52,14 +45,12 @@ func PortalLogout(c *fiber.Ctx) error {
|
||||
func PortalDashboard(c *fiber.Ctx) error {
|
||||
u := middlewares.PortalUserFromLocals(c)
|
||||
if u == nil {
|
||||
log.Println("[PORTAL DASHBOARD] Usuario no en locals, redirigiendo a login")
|
||||
return c.Redirect("/portal/login")
|
||||
}
|
||||
|
||||
// Recargar con accesos
|
||||
fullUser, err := models.GetPortalUserByID(u.ID)
|
||||
if err != nil {
|
||||
log.Printf("[PORTAL DASHBOARD] Error cargando usuario %d: %v", u.ID, err)
|
||||
return c.Redirect("/portal/login")
|
||||
}
|
||||
|
||||
@@ -87,7 +78,7 @@ func PortalDashboard(c *fiber.Ctx) error {
|
||||
"portalUser": fullUser,
|
||||
"proyectos": proyectos,
|
||||
"grupos": grupos,
|
||||
"isPartner": fullUser.Rol == "partner" || (fullUser.Role != nil && fullUser.Role.EsPortalPartner),
|
||||
"isPartner": fullUser.Rol == "partner",
|
||||
}, "layouts/portal")
|
||||
}
|
||||
|
||||
@@ -229,7 +220,6 @@ 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)
|
||||
}
|
||||
|
||||
@@ -264,7 +254,6 @@ 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)
|
||||
}
|
||||
|
||||
@@ -335,42 +324,3 @@ func PortalDownloadFactura(c *fiber.Ctx) error {
|
||||
c.Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, f.OriginalName))
|
||||
return c.SendFile(clean)
|
||||
}
|
||||
|
||||
// ─── Notificaciones in-app del portal user ────────────────────────────────────
|
||||
|
||||
func PortalGetNotifs(c *fiber.Ctx) error {
|
||||
u := middlewares.PortalUserFromLocals(c)
|
||||
if u == nil {
|
||||
return c.Status(401).JSON(fiber.Map{"error": "no autenticado"})
|
||||
}
|
||||
soloNoLeidas := c.Query("no_leidas") == "1"
|
||||
items, err := models.GetSistemaNotifs("portal_user", u.ID, soloNoLeidas)
|
||||
if err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
count := models.CountUnreadNotifs("portal_user", u.ID)
|
||||
return c.JSON(fiber.Map{"items": items, "unread": count})
|
||||
}
|
||||
|
||||
func PortalMarcarNotifLeida(c *fiber.Ctx) error {
|
||||
u := middlewares.PortalUserFromLocals(c)
|
||||
if u == nil {
|
||||
return c.Status(401).JSON(fiber.Map{"error": "no autenticado"})
|
||||
}
|
||||
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 PortalMarcarTodasLeidas(c *fiber.Ctx) error {
|
||||
u := middlewares.PortalUserFromLocals(c)
|
||||
if u == nil {
|
||||
return c.Status(401).JSON(fiber.Map{"error": "no autenticado"})
|
||||
}
|
||||
if err := models.MarcarTodasLeidas("portal_user", u.ID); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
return c.JSON(fiber.Map{"ok": true})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user