La integración VCard vivía solo en /api/v1, que autentica por cookie de sesión: obliga a manejar cookie jar, no permite allowlist por IP y no se puede revocar sin tocar la contraseña del usuario (ver docs/api-v1-contrato.md, punto 7). Ahora los mismos controladores están también bajo /api/v2/vcard/* con Bearer + IP + scope, que es lo que administra la pantalla /app/api-keys. El scope "vcard" acota la llave a estos 12 endpoints: sin él, esa integración tendría acceso a los otros ~300 de v2. /api/v1 se mantiene intacto — esto es un camino nuevo, no un reemplazo forzado, así que lo que ya está instalado sigue andando mientras migran. Se agregan dos chequeos porque el compilador no ve ninguno de los dos errores: que las 12 rutas queden registradas con su método y path (un typo se descubriría recién con un 404 del lado del integrador), y que todas figuren en el spec de /api/v2, que se mantiene a mano y se desincroniza en silencio. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
508 lines
33 KiB
Go
508 lines
33 KiB
Go
package routes
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/sujit-baniya/fiber-boilerplate/rest/controllers"
|
|
apiControllers "github.com/sujit-baniya/fiber-boilerplate/rest/controllers/api"
|
|
"github.com/sujit-baniya/fiber-boilerplate/rest/middlewares"
|
|
)
|
|
|
|
func AdminApiRoutes(api fiber.Router) {
|
|
h := api.Group("v2", middlewares.AdminApiAuth())
|
|
|
|
// ─── Spec (documentación completa de la API) ─────────────────────────────
|
|
h.Get("/spec", controllers.AdminApiSpec)
|
|
|
|
// ─── Usuarios / Roles / Módulos / Submódulos ─────────────────────────────
|
|
// Todo el sistema de permisos queda bajo un único scope "usuarios": una
|
|
// ApiKey con este scope puede crear/editar cuentas y roles, así que es
|
|
// tan sensible como tener acceso administrativo completo al panel.
|
|
admin := h.Group("", middlewares.RequireScope("usuarios"))
|
|
admin.Get("/users", controllers.GetUsers)
|
|
admin.Get("/users/:id", controllers.GetUser)
|
|
admin.Post("/users", controllers.CreateUser)
|
|
admin.Put("/users/:id", controllers.UpdateUser)
|
|
admin.Delete("/users/:id", controllers.DeleteUser)
|
|
|
|
admin.Get("/roles", controllers.GetRoles)
|
|
admin.Post("/roles", controllers.CreateRole)
|
|
admin.Put("/roles/:id", controllers.UpdateRole)
|
|
admin.Delete("/roles/:id", controllers.DeleteRole)
|
|
|
|
admin.Get("/modules", controllers.GetModules)
|
|
admin.Post("/modules", controllers.CreateModule)
|
|
admin.Put("/modules/:id", controllers.UpdateModule)
|
|
admin.Delete("/modules/:id", controllers.DeleteModule)
|
|
|
|
admin.Get("/submodules", controllers.GetSubmodules)
|
|
admin.Post("/submodules", controllers.CreateSubmodule)
|
|
admin.Put("/submodules/:id", controllers.UpdateSubmodule)
|
|
admin.Delete("/submodules/:id", controllers.DeleteSubmodule)
|
|
|
|
// ─── Servidores ──────────────────────────────────────────────────────────
|
|
h.Get("/servidores", controllers.GetServidor)
|
|
h.Post("/servidores", controllers.CreateServidor)
|
|
h.Put("/servidores/:id", controllers.UpdateServidor)
|
|
h.Delete("/servidores/:id", controllers.DeleteServidor)
|
|
h.Get("/servidores/:id/dashboard", controllers.GetServidorDashboard)
|
|
h.Get("/servidores/:id/metricas-history", controllers.GetMetricasHistory)
|
|
|
|
// ─── Proveedores de servidor ─────────────────────────────────────────────
|
|
h.Get("/prov-servidores", controllers.GetProvServidor)
|
|
h.Post("/prov-servidores", controllers.CreateProvServidor)
|
|
h.Put("/prov-servidores/:id", controllers.UpdateProvServidor)
|
|
h.Delete("/prov-servidores/:id", controllers.DeleteProvServidor)
|
|
|
|
// ─── Tipos de servidor ───────────────────────────────────────────────────
|
|
h.Get("/tipos-servidor", controllers.GetTipoServidor)
|
|
h.Post("/tipos-servidor", controllers.CreateTipoServidor)
|
|
h.Put("/tipos-servidor/:id", controllers.UpdateTipoServidor)
|
|
h.Delete("/tipos-servidor/:id", controllers.DeleteTipoServidor)
|
|
|
|
// ─── Tipos de DB ─────────────────────────────────────────────────────────
|
|
h.Get("/tipos-db", controllers.GetTipoDb)
|
|
h.Post("/tipos-db", controllers.CreateTipoDb)
|
|
h.Put("/tipos-db/:id", controllers.UpdateTipoDb)
|
|
h.Delete("/tipos-db/:id", controllers.DeleteTipoDb)
|
|
|
|
// ─── Conexiones SSH ──────────────────────────────────────────────────────
|
|
h.Get("/conexiones-ssh", controllers.GetConxSsh)
|
|
h.Post("/conexiones-ssh", controllers.CreateConxSsh)
|
|
h.Put("/conexiones-ssh/:id", controllers.UpdateConxSsh)
|
|
h.Delete("/conexiones-ssh/:id", controllers.DeleteConxSsh)
|
|
|
|
// ─── Conexiones DB ───────────────────────────────────────────────────────
|
|
h.Get("/conexiones-db", controllers.GetConxDb)
|
|
h.Get("/conexiones-db/select", controllers.GetConxDbSelect)
|
|
h.Post("/conexiones-db", controllers.CreateConxDb)
|
|
h.Put("/conexiones-db/:id", controllers.UpdateConxDb)
|
|
h.Delete("/conexiones-db/:id", controllers.DeleteConxDb)
|
|
|
|
// ─── Clientes ────────────────────────────────────────────────────────────
|
|
h.Get("/clientes", controllers.GetClientes)
|
|
h.Get("/clientes/select", controllers.GetClientesSelect)
|
|
h.Post("/clientes", controllers.CreateCliente)
|
|
h.Put("/clientes/:id", controllers.UpdateCliente)
|
|
h.Delete("/clientes/:id", controllers.DeleteCliente)
|
|
h.Get("/clientes/:clienteID/documentos", controllers.GetClienteDocumentos)
|
|
h.Post("/clientes/:clienteID/documentos", controllers.UploadClienteDocumentos)
|
|
h.Delete("/clientes/:clienteID/documentos/:docID", controllers.DeleteClienteDocumento)
|
|
h.Get("/clientes/:clienteID/documentos/:docID/download", controllers.DownloadClienteDocumento)
|
|
|
|
// ─── Servicios ───────────────────────────────────────────────────────────
|
|
h.Get("/servicios", controllers.GetServicios)
|
|
h.Get("/servicios/select", controllers.GetServiciosSelect)
|
|
h.Post("/servicios", controllers.CreateServicio)
|
|
h.Put("/servicios/:id", controllers.UpdateServicio)
|
|
h.Delete("/servicios/:id", controllers.DeleteServicio)
|
|
|
|
// ─── Contratos ───────────────────────────────────────────────────────────
|
|
h.Get("/contratos", controllers.GetContratos)
|
|
h.Post("/contratos", controllers.CreateContrato)
|
|
h.Put("/contratos/:id", controllers.UpdateContrato)
|
|
h.Delete("/contratos/:id", controllers.DeleteContrato)
|
|
h.Post("/contratos/:id/renovar", controllers.RenovarContrato)
|
|
h.Post("/contratos/:id/enviar-correo", controllers.EnviarCorreoContrato)
|
|
h.Get("/contratos/:id/historial", controllers.GetHistorialContrato)
|
|
h.Post("/contratos/:id/verificar-pago", controllers.VerificarPagoBold)
|
|
h.Post("/contratos/:id/marcar-pagado", controllers.MarcarPagoManual)
|
|
h.Post("/contratos/:id/generar-documento", controllers.GenerarDocumentoContrato)
|
|
|
|
// ─── Plantillas de correo ────────────────────────────────────────────────
|
|
h.Get("/plantillas-correo", controllers.GetPlantillas)
|
|
h.Post("/plantillas-correo", controllers.CreatePlantilla)
|
|
h.Put("/plantillas-correo/:id", controllers.UpdatePlantilla)
|
|
h.Delete("/plantillas-correo/:id", controllers.DeletePlantilla)
|
|
h.Get("/plantillas-correo/:id/preview", controllers.PreviewPlantilla)
|
|
|
|
// ─── Reglas de notificación ──────────────────────────────────────────────
|
|
h.Get("/reglas-notificacion", controllers.GetReglas)
|
|
h.Post("/reglas-notificacion", controllers.CreateRegla)
|
|
h.Put("/reglas-notificacion/:id", controllers.UpdateRegla)
|
|
h.Delete("/reglas-notificacion/:id", controllers.DeleteRegla)
|
|
|
|
// ─── Historial de notificaciones ─────────────────────────────────────────
|
|
h.Get("/historial-notificaciones", controllers.GetHistorial)
|
|
h.Post("/historial-notificaciones/:id/reenviar", controllers.ReenviarNotificacion)
|
|
|
|
// ─── SMTP Config ─────────────────────────────────────────────────────────
|
|
h.Get("/smtp-config", controllers.GetSmtpConfig)
|
|
h.Post("/smtp-config", controllers.SaveSmtpConfig)
|
|
|
|
// ─── Tareas (kanban) ─────────────────────────────────────────────────────
|
|
h.Get("/tareas", controllers.GetTareas)
|
|
h.Get("/tareas/usuarios", controllers.GetUsuariosSistema)
|
|
h.Post("/tareas", controllers.CreateTarea)
|
|
h.Get("/tareas/:id", controllers.GetTareaDetalle)
|
|
h.Put("/tareas/:id", controllers.UpdateTarea)
|
|
h.Put("/tareas/:id/estado", controllers.CambiarEstadoTarea)
|
|
h.Delete("/tareas/:id", controllers.DeleteTareaHandler)
|
|
h.Post("/tareas/:id/comentario", controllers.AddComentario)
|
|
|
|
// ─── Monitor de URLs ─────────────────────────────────────────────────────
|
|
h.Get("/url-monitors", controllers.GetUrlMonitors)
|
|
h.Post("/url-monitors", controllers.CreateUrlMonitor)
|
|
h.Put("/url-monitors/:id", controllers.UpdateUrlMonitor)
|
|
h.Delete("/url-monitors/:id", controllers.DeleteUrlMonitorHandler)
|
|
h.Post("/url-monitors/:id/check", controllers.CheckUrlMonitorNow)
|
|
h.Get("/url-monitors/:id/logs", controllers.GetUrlMonitorLogsHandler)
|
|
|
|
// ─── Proyectos ───────────────────────────────────────────────────────────
|
|
h.Get("/proyectos", controllers.LoadProyectos)
|
|
h.Post("/proyectos", controllers.CreateProyecto)
|
|
h.Put("/proyectos/:id", controllers.UpdateProyecto)
|
|
h.Delete("/proyectos/:id", controllers.DeleteProyecto)
|
|
h.Get("/proyectos/:id/fases", controllers.GetFases)
|
|
h.Post("/proyectos/:id/fases", controllers.CreateFase)
|
|
h.Put("/proyectos/:id/fases/:faseID", controllers.UpdateFase)
|
|
h.Delete("/proyectos/:id/fases/:faseID", controllers.DeleteFase)
|
|
h.Get("/proyectos/:id/avances", controllers.GetAvances)
|
|
h.Post("/proyectos/:id/avances", controllers.CreateAvance)
|
|
h.Put("/proyectos/:id/avances/:avID", controllers.UpdateAvance)
|
|
h.Delete("/proyectos/:id/avances/:avID", controllers.DeleteAvance)
|
|
h.Get("/proyectos/:id/entregables", controllers.GetEntregables)
|
|
h.Post("/proyectos/:id/entregables", controllers.UploadEntregable)
|
|
h.Delete("/proyectos/:id/entregables/:entID", controllers.DeleteEntregable)
|
|
h.Get("/proyectos/:id/entregables/:entID/download", controllers.DownloadEntregable)
|
|
h.Get("/proyectos/:id/tickets", controllers.GetTickets)
|
|
h.Put("/proyectos/:id/tickets/:ticketID/estado", controllers.UpdateTicketEstadoAdmin)
|
|
h.Post("/proyectos/:id/tickets/:ticketID/mensaje", controllers.AdminResponderTicket)
|
|
h.Get("/proyectos/:id/documentos", controllers.GetDocumentos)
|
|
h.Post("/proyectos/:id/documentos", controllers.UploadDocumento)
|
|
h.Delete("/proyectos/:id/documentos/:docID", controllers.DeleteDocumento)
|
|
h.Get("/proyectos/:id/documentos/:docID/download", controllers.DownloadDocumento)
|
|
|
|
// ─── Portal de Usuarios ──────────────────────────────────────────────────
|
|
h.Get("/portal-usuarios", controllers.LoadPortalUsuarios)
|
|
h.Get("/portal-usuarios/:id", controllers.GetPortalUsuarioDetail)
|
|
h.Post("/portal-usuarios", controllers.CreatePortalUsuario)
|
|
h.Put("/portal-usuarios/:id", controllers.UpdatePortalUsuario)
|
|
h.Delete("/portal-usuarios/:id", controllers.DeletePortalUsuario)
|
|
h.Post("/portal-usuarios/:id/acceso", controllers.AddPortalAcceso)
|
|
h.Delete("/portal-usuarios/:id/acceso/:clienteID", controllers.RemovePortalAcceso)
|
|
h.Post("/portal-usuarios/:id/send-credentials", controllers.SendPortalCredentials)
|
|
|
|
// ─── Facturas ────────────────────────────────────────────────────────────
|
|
h.Get("/facturas", controllers.LoadFacturas)
|
|
h.Post("/facturas", controllers.CreateFactura)
|
|
h.Put("/facturas/:id", controllers.UpdateFactura)
|
|
h.Delete("/facturas/:id", controllers.DeleteFactura)
|
|
h.Post("/facturas/:id/upload-pdf", controllers.UploadFacturaPDF)
|
|
h.Get("/facturas/:id/download", controllers.DownloadFacturaPDF)
|
|
|
|
// ─── Tickets (global) ────────────────────────────────────────────────────
|
|
h.Get("/tickets", controllers.GetAllTicketsAdmin)
|
|
h.Put("/tickets/:ticketID/estado", controllers.UpdateTicketEstadoAdmin)
|
|
h.Post("/tickets/:ticketID/mensaje", controllers.AdminResponderTicket)
|
|
|
|
// ─── Contabilidad ────────────────────────────────────────────────────────
|
|
h.Get("/contabilidad/dashboard", controllers.ContabilidadDashboard)
|
|
h.Get("/contabilidad/consolidado", controllers.ContabilidadConsolidado)
|
|
h.Get("/contabilidad/consolidados", controllers.ContabilidadListConsolidados)
|
|
// Transacciones
|
|
h.Get("/contabilidad/transacciones", controllers.GetTransacciones)
|
|
h.Post("/contabilidad/transacciones", controllers.CreateTransaccion)
|
|
h.Put("/contabilidad/transacciones/:id", controllers.UpdateTransaccion)
|
|
h.Delete("/contabilidad/transacciones/:id", controllers.DeleteTransaccion)
|
|
// Cuentas contables
|
|
h.Get("/contabilidad/cuentas", controllers.GetCuentas)
|
|
h.Get("/contabilidad/cuentas/select", controllers.GetCuentasSelect)
|
|
h.Post("/contabilidad/cuentas", controllers.CreateCuenta)
|
|
h.Put("/contabilidad/cuentas/:id", controllers.UpdateCuenta)
|
|
h.Delete("/contabilidad/cuentas/:id", controllers.DeleteCuenta)
|
|
// Entidades
|
|
h.Get("/contabilidad/entidades", controllers.GetEntidades)
|
|
h.Get("/contabilidad/entidades/select", controllers.GetEntidadesSelect)
|
|
h.Post("/contabilidad/entidades", controllers.CreateEntidad)
|
|
h.Put("/contabilidad/entidades/:id", controllers.UpdateEntidad)
|
|
h.Delete("/contabilidad/entidades/:id", controllers.DeleteEntidad)
|
|
// Cuentas por cobrar
|
|
h.Get("/contabilidad/cuentas-cobro", controllers.GetCuentasCobro)
|
|
h.Post("/contabilidad/cuentas-cobro", controllers.CreateCuentaCobro)
|
|
h.Put("/contabilidad/cuentas-cobro/:id", controllers.UpdateCuentaCobro)
|
|
h.Delete("/contabilidad/cuentas-cobro/:id", controllers.DeleteCuentaCobro)
|
|
h.Post("/contabilidad/cuentas-cobro/:id/pagar", controllers.MarcarCuentaCobroPagada)
|
|
h.Post("/contabilidad/cuentas-cobro/:id/generar-documento", controllers.GenerarDocumentoCuentaCobro)
|
|
// Cuentas por pagar
|
|
h.Get("/contabilidad/cuentas-pagar", controllers.GetCuentasPagar)
|
|
h.Post("/contabilidad/cuentas-pagar", controllers.CreateCuentaPagar)
|
|
h.Put("/contabilidad/cuentas-pagar/:id", controllers.UpdateCuentaPagar)
|
|
h.Post("/contabilidad/cuentas-pagar/:id/pagar", controllers.MarcarCuentaPagarPagada)
|
|
h.Delete("/contabilidad/cuentas-pagar/:id", controllers.DeleteCuentaPagar)
|
|
h.Get("/contabilidad/cuentas-pagar/:id/archivo", controllers.DownloadCuentaPagarArchivo)
|
|
|
|
// ─── Productos SaaS ──────────────────────────────────────────────────────
|
|
h.Get("/saas", controllers.GetSaasProductos)
|
|
h.Post("/saas", controllers.CreateSaasProducto)
|
|
h.Put("/saas/:id", controllers.UpdateSaasProducto)
|
|
h.Delete("/saas/:id", controllers.DeleteSaasProducto)
|
|
h.Get("/saas/:id/health", controllers.HealthCheckSaas)
|
|
|
|
// ─── Integraciones SaaS (dispatcher) ─────────────────────────────────────
|
|
h.Get("/saas-api", controllers.GetSaasApiConfigs)
|
|
h.Post("/saas-api", controllers.CreateSaasApiConfig)
|
|
h.Put("/saas-api/:id", controllers.UpdateSaasApiConfig)
|
|
h.Delete("/saas-api/:id", controllers.DeleteSaasApiConfig)
|
|
h.Get("/saas-api/logs", controllers.GetSaasDispatchLogs)
|
|
|
|
// ─── Documentación ───────────────────────────────────────────────────────
|
|
h.Get("/doc/categorias", controllers.GetDocCategorias)
|
|
h.Post("/doc/categorias", controllers.CreateDocCategoria)
|
|
h.Put("/doc/categorias/:id", controllers.UpdateDocCategoria)
|
|
h.Delete("/doc/categorias/:id", controllers.DeleteDocCategoria)
|
|
h.Get("/doc/paginas", controllers.GetDocPaginas)
|
|
h.Get("/doc/paginas/:id", controllers.GetDocPaginaDetalle)
|
|
h.Post("/doc/paginas", controllers.CreateDocPagina)
|
|
h.Put("/doc/paginas/:id", controllers.UpdateDocPagina)
|
|
h.Delete("/doc/paginas/:id", controllers.DeleteDocPagina)
|
|
|
|
// ─── Configuraciones de IA ───────────────────────────────────────────────
|
|
h.Get("/ai-config", controllers.GetAiConfigs)
|
|
h.Get("/ai-config/select", controllers.GetAiConfigSelect)
|
|
h.Post("/ai-config", controllers.CreateAiConfigHandler)
|
|
h.Put("/ai-config/:id", controllers.UpdateAiConfigHandler)
|
|
h.Delete("/ai-config/:id", controllers.DeleteAiConfigHandler)
|
|
h.Get("/ai-config/:id/test", controllers.TestAiConfigHandler)
|
|
|
|
// ─── Pagos externos (API para que apps de terceros pidan cobros) ───────────
|
|
h.Get("/pagos-externos/servicios", controllers.GetServiciosPagoExterno)
|
|
h.Post("/pagos-externos/servicios", controllers.CreateServicioPagoExternoHandler)
|
|
h.Put("/pagos-externos/servicios/:id", controllers.UpdateServicioPagoExternoHandler)
|
|
h.Delete("/pagos-externos/servicios/:id", controllers.DeleteServicioPagoExternoHandler)
|
|
h.Post("/pagos-externos/servicios/:id/regenerar-token", controllers.RegenerarTokenServicioPagoHandler)
|
|
h.Get("/pagos-externos/solicitudes", controllers.GetSolicitudesPagoExternoHandler)
|
|
|
|
// ─── API Keys de /api/v2 ────────────────────────────────────────────────
|
|
h.Get("/api-keys", controllers.GetApiKeys)
|
|
h.Post("/api-keys", controllers.CreateApiKeyHandler)
|
|
h.Put("/api-keys/:id", controllers.UpdateApiKeyHandler)
|
|
h.Delete("/api-keys/:id", controllers.DeleteApiKeyHandler)
|
|
h.Post("/api-keys/:id/regenerar-token", controllers.RegenerarApiKeyHandler)
|
|
|
|
// ─── uMind: chat con IA embebible por tenant ───────────────────────────────
|
|
h.Get("/umind/tenants", controllers.GetUmindTenants)
|
|
h.Post("/umind/tenants", controllers.CreateUmindTenantHandler)
|
|
h.Put("/umind/tenants/:id", controllers.UpdateUmindTenantHandler)
|
|
h.Delete("/umind/tenants/:id", controllers.DeleteUmindTenantHandler)
|
|
h.Get("/umind/documentos", controllers.GetUmindDocumentosHandler)
|
|
h.Post("/umind/documentos", controllers.CreateUmindDocumentoHandler)
|
|
h.Delete("/umind/documentos/:id", controllers.DeleteUmindDocumentoHandler)
|
|
h.Get("/umind/sesiones", controllers.GetUmindSesionesHandler)
|
|
h.Get("/umind/historial", controllers.GetUmindHistorialHandler)
|
|
|
|
// ─── OSS API (almacenamiento) ────────────────────────────────────────────
|
|
// La gestión de credenciales de storage (CRUD de config) queda solo para
|
|
// la llave maestra; el scope "oss" de una ApiKey solo permite operar
|
|
// archivos (subir/listar/borrar), no ver ni cambiar las credenciales.
|
|
h.Get("/oss-api", controllers.GetOssApiConfigs)
|
|
h.Get("/oss-api/active", controllers.GetActiveOssApiList)
|
|
h.Post("/oss-api", controllers.CreateOssApiConfig)
|
|
h.Put("/oss-api/:id", controllers.UpdateOssApiConfig)
|
|
h.Delete("/oss-api/:id", controllers.DeleteOssApiConfig)
|
|
h.Get("/oss-api/browser", middlewares.RequireScope("oss"), controllers.OssBrowserList)
|
|
h.Get("/oss-api/browser/url", middlewares.RequireScope("oss"), controllers.OssBrowserSignedURL)
|
|
h.Delete("/oss-api/browser/object", middlewares.RequireScope("oss"), controllers.OssBrowserDelete)
|
|
h.Post("/oss-api/browser/upload", middlewares.RequireScope("oss"), controllers.OssBrowserUpload)
|
|
|
|
// ─── Telegram ────────────────────────────────────────────────────────────
|
|
h.Get("/telegram", controllers.GetTelegramConfigs)
|
|
h.Post("/telegram", controllers.CreateTelegramConfig)
|
|
h.Put("/telegram/:id", controllers.UpdateTelegramConfig)
|
|
h.Delete("/telegram/:id", controllers.DeleteTelegramConfig)
|
|
h.Post("/telegram/:id/test", controllers.TestTelegramConfig)
|
|
h.Post("/telegram/send", controllers.SendTelegramNotification)
|
|
h.Get("/telegram/logs", controllers.GetTelegramLogs)
|
|
|
|
// ─── Notificaciones config ───────────────────────────────────────────────
|
|
h.Get("/notif-config", controllers.GetNotifConfigs)
|
|
h.Post("/notif-config", controllers.SaveNotifConfig)
|
|
h.Get("/servidor-alerta-config", controllers.GetServidorAlertaConfig)
|
|
h.Post("/servidor-alerta-config", controllers.SaveServidorAlertaConfig)
|
|
|
|
// ─── Partner Recursos / Comunicados ──────────────────────────────────────
|
|
h.Get("/partner-recursos", controllers.LoadPartnerRecursos)
|
|
h.Post("/partner-recursos", controllers.CreatePartnerRecurso)
|
|
h.Put("/partner-recursos/:id", controllers.UpdatePartnerRecurso)
|
|
h.Delete("/partner-recursos/:id", controllers.DeletePartnerRecurso)
|
|
h.Get("/partner-comunicados", controllers.LoadPartnerComunicados)
|
|
h.Post("/partner-comunicados", controllers.CreatePartnerComunicado)
|
|
h.Put("/partner-comunicados/:id", controllers.UpdatePartnerComunicado)
|
|
h.Delete("/partner-comunicados/:id", controllers.DeletePartnerComunicado)
|
|
|
|
// ─── Shield ──────────────────────────────────────────────────────────────
|
|
h.Get("/shield", controllers.LoadShieldConfig)
|
|
h.Post("/shield", controllers.SaveShieldConfig)
|
|
h.Get("/shield/health", controllers.ShieldHealth)
|
|
h.Get("/shield/logs", controllers.ShieldLogs)
|
|
h.Get("/shield/logs/stats", controllers.ShieldLogStats)
|
|
h.Get("/shield/review-requests", controllers.ShieldReviewRequests)
|
|
h.Put("/shield/review-requests/:id/approve", controllers.ShieldApproveRequest)
|
|
h.Put("/shield/review-requests/:id/reject", controllers.ShieldRejectRequest)
|
|
h.Get("/shield/whitelist", controllers.ShieldWhitelist)
|
|
h.Post("/shield/whitelist", controllers.ShieldAddWhitelist)
|
|
h.Delete("/shield/whitelist/:domain", controllers.ShieldDeleteWhitelist)
|
|
h.Get("/shield/blacklist", controllers.ShieldBlacklist)
|
|
h.Post("/shield/blacklist", controllers.ShieldAddBlacklist)
|
|
h.Delete("/shield/blacklist/:domain", controllers.ShieldDeleteBlacklist)
|
|
|
|
// ─── WebSMS ──────────────────────────────────────────────────────────────
|
|
h.Get("/websms/config", controllers.GetWebSmsConfig)
|
|
h.Post("/websms/save", controllers.SaveWebSmsConfig)
|
|
h.Post("/websms/test", controllers.TestWebSms)
|
|
h.Get("/websms/logs", controllers.GetWebSmsLogs)
|
|
|
|
// ─── Pasarelas de pago ───────────────────────────────────────────────────
|
|
// Credenciales de Bold/dLocal/PayPal: scope "pasarelas" propio.
|
|
pasarelas := h.Group("/pasarelas", middlewares.RequireScope("pasarelas"))
|
|
pasarelas.Get("/bold/config", controllers.GetBoldConfigAPI)
|
|
pasarelas.Post("/bold/save", controllers.SaveBoldConfig)
|
|
pasarelas.Get("/bold/logs", controllers.BoldWebhookLogs)
|
|
pasarelas.Get("/dlocal/config", controllers.GetDlocalConfigAPI)
|
|
pasarelas.Post("/dlocal/save", controllers.SaveDlocalConfigWeb)
|
|
pasarelas.Get("/dlocal/logs", controllers.DlocalPaymentLogsPaginated)
|
|
pasarelas.Get("/paypal/config", controllers.GetPaypalConfigAPI)
|
|
pasarelas.Post("/paypal/save", controllers.SavePaypalConfigWeb)
|
|
|
|
// ─── Query Runner ────────────────────────────────────────────────────────
|
|
// SQL arbitrario contra cualquier conexión configurada: es de lo más
|
|
// sensible que expone /api/v2, así que una ApiKey scoped necesita el
|
|
// scope "query_runner" explícito para todo este grupo.
|
|
qr := h.Group("/query-runner", middlewares.RequireScope("query_runner"))
|
|
qr.Get("/connections", controllers.GetConxDbList)
|
|
qr.Get("/databases", controllers.GetDatabases)
|
|
qr.Get("/tables", controllers.GetTables)
|
|
qr.Get("/relations", controllers.GetRelations)
|
|
qr.Get("/test", controllers.TestConnection)
|
|
qr.Post("/run", controllers.RunQuery)
|
|
qr.Post("/run-batch", controllers.RunBatchQuery)
|
|
qr.Get("/history", controllers.GetHistory)
|
|
qr.Get("/columns", controllers.GetTableColumnsHandler)
|
|
|
|
// ─── VCard: QR, VCF y cobros ─────────────────────────────────────────────
|
|
// Los mismos controladores que /api/v1, montados acá para que una
|
|
// integración externa pueda autenticarse con Bearer + IP en vez de la
|
|
// cookie de sesión (ver docs/api-v1-contrato.md, punto 7).
|
|
//
|
|
// El scope "vcard" acota la llave a esto y nada más: sin él, la
|
|
// integración de VCard tendría acceso a los otros 300 endpoints de v2.
|
|
//
|
|
// /api/v1 se mantiene funcionando tal cual para no romper lo que ya está
|
|
// instalado; esto es el camino nuevo, no un reemplazo forzado.
|
|
vcard := h.Group("/vcard", middlewares.RequireScope("vcard"))
|
|
vcard.Post("/qr-tmp", apiControllers.CreateQrTmp)
|
|
vcard.Post("/qr", apiControllers.CreateQr) // responde image/webp, no JSON
|
|
vcard.Post("/qr-url", apiControllers.CreateUrlQr)
|
|
vcard.Post("/vcf", apiControllers.CreateVcf)
|
|
|
|
// dLocal y Rapyd bajo el mismo scope: son las operaciones de cobro que
|
|
// acompañan a la VCard, y quien integra una necesita la otra.
|
|
vcard.Post("/dlocal/planes", apiControllers.CreatePlan)
|
|
vcard.Get("/dlocal/planes", apiControllers.SeePlanes)
|
|
vcard.Get("/dlocal/planes/:planID", apiControllers.SeePlan)
|
|
vcard.Patch("/dlocal/planes/:planID", apiControllers.UpdatedPlan)
|
|
vcard.Patch("/dlocal/planes/:planId/suscripciones/:subscriptionId/desactivar", apiControllers.DeactivatePlan)
|
|
vcard.Get("/dlocal/suscripciones/:subscriptionId/ejecuciones/:invoiceId", apiControllers.SeeSubscription)
|
|
vcard.Post("/dlocal/pagos", apiControllers.CreatePago)
|
|
vcard.Post("/rapyd/wallets", apiControllers.MakeWallet)
|
|
|
|
// ─── Hostinger ───────────────────────────────────────────────────────────
|
|
h.Get("/hostinger/vps", controllers.GetHostingerVPS)
|
|
h.Get("/hostinger/domains", controllers.GetHostingerDomains)
|
|
h.Get("/hostinger/dns/:domain", controllers.GetHostingerDNS)
|
|
h.Get("/hostinger/orders", controllers.GetHostingerOrders)
|
|
h.Get("/hostinger/hosting", controllers.GetHostingerHosting)
|
|
|
|
// ─── Cloudflare ──────────────────────────────────────────────────────────
|
|
h.Get("/cloudflare/zones", controllers.GetCloudflareZones)
|
|
h.Get("/cloudflare/zones/:zone_id/dns", controllers.GetCloudflareDNS)
|
|
h.Post("/cloudflare/zones/:zone_id/dns", controllers.CreateCloudflareDNS)
|
|
h.Put("/cloudflare/zones/:zone_id/dns/:record_id", controllers.UpdateCloudflareDNS)
|
|
h.Delete("/cloudflare/zones/:zone_id/dns/:record_id", controllers.DeleteCloudflareDNS)
|
|
|
|
// ─── Coolify instancias (CRUD multi-instancia) ───────────────────────────
|
|
h.Get("/coolify/configs", controllers.CoolifyListConfigs)
|
|
h.Post("/coolify/configs", controllers.CoolifyCreateConfig)
|
|
h.Put("/coolify/configs/:id", controllers.CoolifyUpdateConfig)
|
|
h.Delete("/coolify/configs/:id", controllers.CoolifyDeleteConfig)
|
|
h.Get("/coolify/configs/:id/test", controllers.CoolifyTestConfig)
|
|
|
|
// ─── Coolify operaciones (todos soportan ?config_id=) ────────────────────
|
|
h.Get("/coolify/apps", controllers.CoolifyListApplications)
|
|
h.Get("/coolify/apps/:uuid", controllers.CoolifyGetApplication)
|
|
h.Get("/coolify/apps/:uuid/logs", controllers.CoolifyApplicationLogs)
|
|
h.Get("/coolify/apps/:uuid/envs", controllers.CoolifyApplicationEnvs)
|
|
h.Post("/coolify/apps/:uuid/envs", controllers.CoolifyApplicationEnvCreate)
|
|
h.Patch("/coolify/apps/:uuid/envs", controllers.CoolifyApplicationEnvUpdateBulk)
|
|
h.Delete("/coolify/apps/:uuid/envs/:env_id", controllers.CoolifyApplicationEnvDelete)
|
|
h.Get("/coolify/apps/:uuid/start", controllers.CoolifyApplicationStart)
|
|
h.Get("/coolify/apps/:uuid/stop", controllers.CoolifyApplicationStop)
|
|
h.Get("/coolify/apps/:uuid/restart", controllers.CoolifyApplicationRestart)
|
|
h.Get("/coolify/apps/:uuid/deployments", controllers.CoolifyApplicationDeployments)
|
|
h.Post("/coolify/apps/:uuid/deploy", controllers.CoolifyApplicationDeploy)
|
|
h.Get("/coolify/servers", controllers.CoolifyListServers)
|
|
h.Get("/coolify/servers/:uuid", controllers.CoolifyGetServer)
|
|
h.Get("/coolify/servers/:uuid/resources", controllers.CoolifyServerResources)
|
|
h.Get("/coolify/servers/:uuid/domains", controllers.CoolifyServerDomains)
|
|
h.Get("/coolify/servers/:uuid/validate", controllers.CoolifyServerValidate)
|
|
h.Get("/coolify/services", controllers.CoolifyListServices)
|
|
h.Get("/coolify/services/:uuid", controllers.CoolifyGetService)
|
|
h.Get("/coolify/services/:uuid/start", controllers.CoolifyServiceStart)
|
|
h.Get("/coolify/services/:uuid/stop", controllers.CoolifyServiceStop)
|
|
h.Get("/coolify/services/:uuid/restart", controllers.CoolifyServiceRestart)
|
|
h.Get("/coolify/services/:uuid/envs", controllers.CoolifyServiceEnvs)
|
|
h.Patch("/coolify/services/:uuid/envs", controllers.CoolifyServiceEnvUpdateBulk)
|
|
h.Get("/coolify/databases", controllers.CoolifyListDatabases)
|
|
h.Get("/coolify/databases/:uuid", controllers.CoolifyGetDatabase)
|
|
h.Get("/coolify/databases/:uuid/start", controllers.CoolifyDatabaseStart)
|
|
h.Get("/coolify/databases/:uuid/stop", controllers.CoolifyDatabaseStop)
|
|
h.Get("/coolify/databases/:uuid/restart", controllers.CoolifyDatabaseRestart)
|
|
h.Get("/coolify/projects", controllers.CoolifyListProjects)
|
|
h.Get("/coolify/projects/:uuid", controllers.CoolifyGetProject)
|
|
h.Get("/coolify/projects/:uuid/environments", controllers.CoolifyProjectEnvironments)
|
|
h.Get("/coolify/deployments", controllers.CoolifyListDeployments)
|
|
h.Get("/coolify/deployments/:uuid", controllers.CoolifyGetDeployment)
|
|
h.Get("/coolify/teams", controllers.CoolifyListTeams)
|
|
h.Get("/coolify/teams/current", controllers.CoolifyCurrentTeam)
|
|
h.Get("/coolify/teams/current/members", controllers.CoolifyTeamMembers)
|
|
|
|
// ─── Agente Telegram: chats autorizados ──────────────────────────────────
|
|
h.Get("/agent/auth", controllers.AgentAuthList)
|
|
h.Get("/agent/auth/recientes", controllers.AgentAuthRecientes)
|
|
h.Post("/agent/auth", controllers.AgentAuthCreate)
|
|
h.Delete("/agent/auth/:id", controllers.AgentAuthDelete)
|
|
h.Delete("/agent/history/:chat_id", controllers.AgentHistoryClear)
|
|
|
|
// ─── Automatización IA: Cotizaciones ─────────────────────────────────────
|
|
h.Post("/cotizaciones", controllers.CreateCotizacion)
|
|
|
|
// ─── Automatización IA: Arquitecturas ────────────────────────────────────
|
|
h.Get("/arquitecturas", controllers.GetArquitecturas)
|
|
h.Post("/arquitecturas", controllers.CreateArquitectura)
|
|
|
|
// ─── Automatización IA: Historial de documentos generados ───────────────
|
|
h.Get("/documentos-generados", controllers.GetDocumentosGenerados)
|
|
h.Get("/documentos-generados/:id/download", controllers.DownloadDocumentoGenerado)
|
|
|
|
// ─── Automatización IA: Plantillas de documento ─────────────────────────
|
|
h.Get("/plantillas-documento", controllers.GetPlantillasDocumento)
|
|
h.Get("/plantillas-documento/:id", controllers.GetPlantillaDocumento)
|
|
h.Post("/plantillas-documento", controllers.CreatePlantillaDocumento)
|
|
h.Put("/plantillas-documento/:id", controllers.UpdatePlantillaDocumento)
|
|
h.Delete("/plantillas-documento/:id", controllers.DeletePlantillaDocumento)
|
|
|
|
// ─── Automatización IA: Tarifas ──────────────────────────────────────────
|
|
h.Get("/tarifas", controllers.GetTarifas)
|
|
h.Post("/tarifas", controllers.CreateTarifa)
|
|
h.Put("/tarifas/:id", controllers.UpdateTarifa)
|
|
h.Delete("/tarifas/:id", controllers.DeleteTarifa)
|
|
|
|
// ─── VCard API ───────────────────────────────────────────────────────────
|
|
h.Get("/vcard-api/config", controllers.VcardApiGetConfig)
|
|
h.Get("/vcard-api/usuarios", controllers.VcardApiUsuarios)
|
|
h.Get("/vcard-api/usuarios/:id", controllers.VcardApiUsuario)
|
|
h.Get("/vcard-api/vcards", controllers.VcardApiVcards)
|
|
h.Get("/vcard-api/planes", controllers.VcardApiPlanes)
|
|
h.Get("/vcard-api/pagos", controllers.VcardApiPagos)
|
|
h.Get("/vcard-api/miniwebs", controllers.VcardApiMiniwebs)
|
|
}
|