package controllers import ( "github.com/gofiber/fiber/v2" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) // PasarelasPage renderiza la vista unificada de pasarelas de pago. func PasarelasPage(c *fiber.Ctx) error { boldCfg, _ := models.GetBoldConfig() dlocalCfg, _ := models.GetLastActiveDlocalApi() data := fiber.Map{ "Title": "Pasarelas de Pago", "Bold": boldCfg, "Dlocal": dlocalCfg, "user": c.Locals("user"), "modules": c.Locals("userModules"), } if err := c.Render("pasarelas_pago", data, "layouts/main"); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } return nil } // ─── Bold ───────────────────────────────────────────────────────────────────── // SaveBoldConfig guarda o actualiza la configuración de Bold. func SaveBoldConfig(c *fiber.Ctx) error { type body struct { ID uint `json:"id" form:"id"` ApiKeyProd string `json:"api_key_prod" form:"api_key_prod"` SecretKeyProd string `json:"secret_key_prod" form:"secret_key_prod"` ApiKeyTest string `json:"api_key_test" form:"api_key_test"` SecretKeyTest string `json:"secret_key_test" form:"secret_key_test"` Modo string `json:"modo" form:"modo"` CallbackUrl string `json:"callback_url" form:"callback_url"` Nota string `json:"nota" form:"nota"` } var b body if err := c.BodyParser(&b); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "body inválido"}) } if b.Modo == "" { b.Modo = "test" } cfg := models.BoldConfig{ ApiKeyProd: b.ApiKeyProd, SecretKeyProd: b.SecretKeyProd, ApiKeyTest: b.ApiKeyTest, SecretKeyTest: b.SecretKeyTest, Modo: b.Modo, CallbackUrl: b.CallbackUrl, Nota: b.Nota, } cfg.ID = b.ID if err := models.SaveBoldConfig(cfg); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"message": "Configuración Bold guardada"}) } // GetBoldConfig devuelve la configuración activa de Bold (para cargar el form). func GetBoldConfigAPI(c *fiber.Ctx) error { cfg, err := models.GetBoldConfig() if err != nil { return c.JSON(fiber.Map{"data": nil}) } return c.JSON(fiber.Map{"data": cfg}) } // ─── dLocal ─────────────────────────────────────────────────────────────────── // SaveDlocalConfig guarda o actualiza la configuración de dLocal. func SaveDlocalConfigWeb(c *fiber.Ctx) error { type body struct { ID uint `json:"id" form:"id"` AccessKeyID string `json:"access_key_id" form:"access_key_id"` AccessKeySecret string `json:"access_key_secret" form:"access_key_secret"` AccessKeyIDdev string `json:"access_key_id_dev" form:"access_key_id_dev"` AccessKeySecretdev string `json:"access_key_secret_dev" form:"access_key_secret_dev"` UrlProd string `json:"url_prod" form:"url_prod"` UrlDev string `json:"url_dev" form:"url_dev"` Modo string `json:"modo" form:"modo"` } var b body if err := c.BodyParser(&b); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "body inválido"}) } if b.Modo == "" { b.Modo = "dev" } cfg := models.DlocalApi{ AccessKeyID: b.AccessKeyID, AccessKeySecret: b.AccessKeySecret, AccessKeyIDdev: b.AccessKeyIDdev, AccessKeySecretdev: b.AccessKeySecretdev, UrlProd: b.UrlProd, UrlDev: b.UrlDev, Modo: b.Modo, IsActive: true, } cfg.ID = b.ID // Desactivar configs previas if cfg.ID == 0 { if err := models.CreateDlocalApi(&cfg); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } } else { if err := models.UpdateDlocalApi(&cfg); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } } return c.JSON(fiber.Map{"message": "Configuración dLocal guardada"}) } // GetDlocalConfigAPI devuelve la configuración activa de dLocal. func GetDlocalConfigAPI(c *fiber.Ctx) error { cfg, err := models.GetLastActiveDlocalApi() if err != nil { return c.JSON(fiber.Map{"data": nil}) } return c.JSON(fiber.Map{"data": cfg}) } // ─── Logs Bold ──────────────────────────────────────────────────────────────── // BoldWebhookLogs devuelve los últimos 50 registros del log de webhooks de Bold. func BoldWebhookLogs(c *fiber.Ctx) error { logs, err := models.GetBoldWebhookLogs(50) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": logs}) } // ─── Logs dLocal ────────────────────────────────────────────────────────────── // DlocalPaymentLogs devuelve los últimos 100 registros de pagos de dLocal. func DlocalPaymentLogs(c *fiber.Ctx) error { logs, err := models.GetDlocalPaymentLogs(100) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(fiber.Map{"data": logs}) }