feat: integracion Bold y pagina unificada de pasarelas de pago
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
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()
|
||||
|
||||
return c.Render("pasarelas_pago", fiber.Map{
|
||||
"Title": "Pasarelas de Pago",
|
||||
"Bold": boldCfg,
|
||||
"Dlocal": dlocalCfg,
|
||||
})
|
||||
}
|
||||
|
||||
// ─── 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})
|
||||
}
|
||||
Reference in New Issue
Block a user