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) }