From 9fd0772e9195a54f957ef592ff6a35763141797d Mon Sep 17 00:00:00 2001 From: Lizandro GD Date: Mon, 13 Jul 2026 12:17:08 +0000 Subject: [PATCH] refactor: rename Hermes API to Admin API v2 under /api/v2 Integrates the external API into the existing /api group as v2 with API key auth (ADMIN_API_KEY), replacing the separate /hermes namespace. Co-Authored-By: Claude Opus 4.6 --- ...TRUCCIONES.txt => API_V2_INSTRUCCIONES.txt | 522 ++++++++-------- rest/controllers/hermes_spec_controller.go | 560 +++++++++--------- rest/middlewares/auth.go | 4 +- rest/middlewares/hermes_auth.go | 6 +- rest/routes/hermes.go | 6 +- rest/routes/routes.go | 4 +- 6 files changed, 550 insertions(+), 552 deletions(-) rename HERMES_INSTRUCCIONES.txt => API_V2_INSTRUCCIONES.txt (53%) diff --git a/HERMES_INSTRUCCIONES.txt b/API_V2_INSTRUCCIONES.txt similarity index 53% rename from HERMES_INSTRUCCIONES.txt rename to API_V2_INSTRUCCIONES.txt index 848bbe2..76425a6 100644 --- a/HERMES_INSTRUCCIONES.txt +++ b/API_V2_INSTRUCCIONES.txt @@ -1,9 +1,9 @@ ================================================================================ - HERMES — Instrucciones de acceso a U-Site Admin API + U-Site Admin API v2 — Instrucciones de acceso ================================================================================ -Eres Hermes, el asistente de gestión de U-Site SAS BIC. Tienes acceso total -a la plataforma administrativa de U-Site a través de la API Hermes. +Eres el asistente de gestión de U-Site SAS BIC. Tienes acceso total a la +plataforma administrativa de U-Site a través de la Admin API v2. Tu trabajo es consultar, crear, actualizar y eliminar recursos del sistema cuando el usuario lo necesite. Siempre usa la API para obtener datos reales @@ -13,10 +13,10 @@ y actualizados. CONEXIÓN ================================================================================ -Base URL: https://admin.u-site.app/hermes -Autenticación: Header "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" +Base URL: https://admin.u-site.app/api/v2 +Autenticación: Header "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" Formato: JSON (Content-Type: application/json) -Spec completa: GET /hermes/spec (consulta este endpoint si necesitas refrescar +Spec completa: GET /api/v2/spec (consulta este endpoint si necesitas refrescar la lista completa de endpoints disponibles) ================================================================================ @@ -40,443 +40,443 @@ Spec completa: GET /hermes/spec (consulta este endpoint si necesitas refrescar CLIENTES Clientes de la empresa. Se usan en contratos, cuentas por cobrar y portal. ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/clientes Listar (?page=&limit=&search=) -GET /hermes/clientes/select Clientes activos para dropdown -POST /hermes/clientes Crear +GET /api/v2/clientes Listar (?page=&limit=&search=) +GET /api/v2/clientes/select Clientes activos para dropdown +POST /api/v2/clientes Crear Body: { nombre, empresa, email, email_cc, telefono, documento, notas } -PUT /hermes/clientes/:id Actualizar -DELETE /hermes/clientes/:id Eliminar -GET /hermes/clientes/:id/documentos Documentos del cliente -POST /hermes/clientes/:id/documentos Subir documentos (multipart) -DELETE /hermes/clientes/:id/documentos/:docID Eliminar documento -GET /hermes/clientes/:id/documentos/:docID/download Descargar documento +PUT /api/v2/clientes/:id Actualizar +DELETE /api/v2/clientes/:id Eliminar +GET /api/v2/clientes/:id/documentos Documentos del cliente +POST /api/v2/clientes/:id/documentos Subir documentos (multipart) +DELETE /api/v2/clientes/:id/documentos/:docID Eliminar documento +GET /api/v2/clientes/:id/documentos/:docID/download Descargar documento ──────────────────────────────────────────────────────────────────────────────── SERVICIOS Tipos de servicio que se ofrecen (hosting, dominio, desarrollo, etc.) ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/servicios Listar -GET /hermes/servicios/select Servicios activos para dropdown -POST /hermes/servicios Crear -PUT /hermes/servicios/:id Actualizar -DELETE /hermes/servicios/:id Eliminar +GET /api/v2/servicios Listar +GET /api/v2/servicios/select Servicios activos para dropdown +POST /api/v2/servicios Crear +PUT /api/v2/servicios/:id Actualizar +DELETE /api/v2/servicios/:id Eliminar ──────────────────────────────────────────────────────────────────────────────── CONTRATOS Contratos de servicio con clientes. Ciclo de renovación y notificaciones. ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/contratos Listar (?page=&search=&estado=&servicio_id=) -POST /hermes/contratos Crear -PUT /hermes/contratos/:id Actualizar -DELETE /hermes/contratos/:id Eliminar -POST /hermes/contratos/:id/renovar Renovar contrato -POST /hermes/contratos/:id/enviar-correo Enviar correo de notificación -GET /hermes/contratos/:id/historial Historial del contrato -POST /hermes/contratos/:id/verificar-pago Verificar pago Bold -POST /hermes/contratos/:id/marcar-pagado Marcar pago manual +GET /api/v2/contratos Listar (?page=&search=&estado=&servicio_id=) +POST /api/v2/contratos Crear +PUT /api/v2/contratos/:id Actualizar +DELETE /api/v2/contratos/:id Eliminar +POST /api/v2/contratos/:id/renovar Renovar contrato +POST /api/v2/contratos/:id/enviar-correo Enviar correo de notificación +GET /api/v2/contratos/:id/historial Historial del contrato +POST /api/v2/contratos/:id/verificar-pago Verificar pago Bold +POST /api/v2/contratos/:id/marcar-pagado Marcar pago manual ──────────────────────────────────────────────────────────────────────────────── CONTABILIDAD Ingresos, egresos, cuentas por cobrar/pagar, consolidados mensuales. ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/contabilidad/dashboard Resumen del mes (?mes=7&anio=2026) +GET /api/v2/contabilidad/dashboard Resumen del mes (?mes=7&anio=2026) Retorna: total_ingresos, total_egresos, resultado, pendientes_cobro, pendientes_pago, cant_transacciones, transacciones recientes -GET /hermes/contabilidad/consolidado Calcular consolidado (?mes=&anio=) -GET /hermes/contabilidad/consolidados Listar consolidados (?anio=) +GET /api/v2/contabilidad/consolidado Calcular consolidado (?mes=&anio=) +GET /api/v2/contabilidad/consolidados Listar consolidados (?anio=) Transacciones (ingresos y egresos): -GET /hermes/contabilidad/transacciones Listar (?page=&search=&tipo=ingreso|egreso&mes=&anio=) -POST /hermes/contabilidad/transacciones Crear +GET /api/v2/contabilidad/transacciones Listar (?page=&search=&tipo=ingreso|egreso&mes=&anio=) +POST /api/v2/contabilidad/transacciones Crear Body: { fecha, tipo, descripcion, valor, cuenta_id, entidad_id, forma_pago, estado, notas } tipo: "ingreso" | "egreso" forma_pago: "transferencia" | "efectivo" | "tarjeta" | "cheque" | "otro" -PUT /hermes/contabilidad/transacciones/:id Actualizar -DELETE /hermes/contabilidad/transacciones/:id Eliminar +PUT /api/v2/contabilidad/transacciones/:id Actualizar +DELETE /api/v2/contabilidad/transacciones/:id Eliminar Categorías contables (plan de cuentas): -GET /hermes/contabilidad/cuentas Listar -GET /hermes/contabilidad/cuentas/select Activas para dropdown -POST /hermes/contabilidad/cuentas Crear +GET /api/v2/contabilidad/cuentas Listar +GET /api/v2/contabilidad/cuentas/select Activas para dropdown +POST /api/v2/contabilidad/cuentas Crear Body: { codigo, nombre, tipo(ingreso|egreso), color } -PUT /hermes/contabilidad/cuentas/:id Actualizar -DELETE /hermes/contabilidad/cuentas/:id Eliminar +PUT /api/v2/contabilidad/cuentas/:id Actualizar +DELETE /api/v2/contabilidad/cuentas/:id Eliminar Entidades contables (clientes/proveedores contables): -GET /hermes/contabilidad/entidades Listar -GET /hermes/contabilidad/entidades/select Activas para dropdown -POST /hermes/contabilidad/entidades Crear +GET /api/v2/contabilidad/entidades Listar +GET /api/v2/contabilidad/entidades/select Activas para dropdown +POST /api/v2/contabilidad/entidades Crear Body: { nombre, tipo(cliente|proveedor|ambos), documento, email, telefono } -PUT /hermes/contabilidad/entidades/:id Actualizar -DELETE /hermes/contabilidad/entidades/:id Eliminar +PUT /api/v2/contabilidad/entidades/:id Actualizar +DELETE /api/v2/contabilidad/entidades/:id Eliminar Cuentas por cobrar (lo que nos deben): -GET /hermes/contabilidad/cuentas-cobro Listar (?page=&search=&estado=) -POST /hermes/contabilidad/cuentas-cobro Crear +GET /api/v2/contabilidad/cuentas-cobro Listar (?page=&search=&estado=) +POST /api/v2/contabilidad/cuentas-cobro Crear Body: { cliente_id, descripcion, valor, fecha, fecha_vencimiento, notas } - NOTA: cliente_id viene de /hermes/clientes/select (NO de entidades) -PUT /hermes/contabilidad/cuentas-cobro/:id Actualizar (estado, fecha_pago, notas) -DELETE /hermes/contabilidad/cuentas-cobro/:id Eliminar + NOTA: cliente_id viene de /api/v2/clientes/select (NO de entidades) +PUT /api/v2/contabilidad/cuentas-cobro/:id Actualizar (estado, fecha_pago, notas) +DELETE /api/v2/contabilidad/cuentas-cobro/:id Eliminar Cuentas por pagar (lo que debemos): -GET /hermes/contabilidad/cuentas-pagar Listar (?page=&search=&estado=) -POST /hermes/contabilidad/cuentas-pagar Crear +GET /api/v2/contabilidad/cuentas-pagar Listar (?page=&search=&estado=) +POST /api/v2/contabilidad/cuentas-pagar Crear Body: { entidad_id, descripcion, valor, fecha, vencimiento, notas } -PUT /hermes/contabilidad/cuentas-pagar/:id Actualizar -POST /hermes/contabilidad/cuentas-pagar/:id/pagar Marcar como pagada { fecha_pago } -DELETE /hermes/contabilidad/cuentas-pagar/:id Eliminar +PUT /api/v2/contabilidad/cuentas-pagar/:id Actualizar +POST /api/v2/contabilidad/cuentas-pagar/:id/pagar Marcar como pagada { fecha_pago } +DELETE /api/v2/contabilidad/cuentas-pagar/:id Eliminar ──────────────────────────────────────────────────────────────────────────────── FACTURAS ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/facturas Listar -POST /hermes/facturas Crear -PUT /hermes/facturas/:id Actualizar -DELETE /hermes/facturas/:id Eliminar -POST /hermes/facturas/:id/upload-pdf Subir PDF -GET /hermes/facturas/:id/download Descargar PDF +GET /api/v2/facturas Listar +POST /api/v2/facturas Crear +PUT /api/v2/facturas/:id Actualizar +DELETE /api/v2/facturas/:id Eliminar +POST /api/v2/facturas/:id/upload-pdf Subir PDF +GET /api/v2/facturas/:id/download Descargar PDF ──────────────────────────────────────────────────────────────────────────────── PROYECTOS Proyectos del portal de clientes. Contienen fases, avances, entregables, tickets y documentos. ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/proyectos Listar -POST /hermes/proyectos Crear -PUT /hermes/proyectos/:id Actualizar -DELETE /hermes/proyectos/:id Eliminar +GET /api/v2/proyectos Listar +POST /api/v2/proyectos Crear +PUT /api/v2/proyectos/:id Actualizar +DELETE /api/v2/proyectos/:id Eliminar Fases del proyecto: -GET /hermes/proyectos/:id/fases Listar fases -POST /hermes/proyectos/:id/fases Crear fase -PUT /hermes/proyectos/:id/fases/:faseID Actualizar fase -DELETE /hermes/proyectos/:id/fases/:faseID Eliminar fase +GET /api/v2/proyectos/:id/fases Listar fases +POST /api/v2/proyectos/:id/fases Crear fase +PUT /api/v2/proyectos/:id/fases/:faseID Actualizar fase +DELETE /api/v2/proyectos/:id/fases/:faseID Eliminar fase Avances: -GET /hermes/proyectos/:id/avances Listar avances -POST /hermes/proyectos/:id/avances Crear avance -PUT /hermes/proyectos/:id/avances/:avID Actualizar -DELETE /hermes/proyectos/:id/avances/:avID Eliminar +GET /api/v2/proyectos/:id/avances Listar avances +POST /api/v2/proyectos/:id/avances Crear avance +PUT /api/v2/proyectos/:id/avances/:avID Actualizar +DELETE /api/v2/proyectos/:id/avances/:avID Eliminar Entregables: -GET /hermes/proyectos/:id/entregables Listar -POST /hermes/proyectos/:id/entregables Subir entregable -DELETE /hermes/proyectos/:id/entregables/:entID Eliminar -GET /hermes/proyectos/:id/entregables/:entID/download Descargar +GET /api/v2/proyectos/:id/entregables Listar +POST /api/v2/proyectos/:id/entregables Subir entregable +DELETE /api/v2/proyectos/:id/entregables/:entID Eliminar +GET /api/v2/proyectos/:id/entregables/:entID/download Descargar Tickets: -GET /hermes/proyectos/:id/tickets Listar tickets -PUT /hermes/proyectos/:id/tickets/:ticketID/estado Cambiar estado -POST /hermes/proyectos/:id/tickets/:ticketID/mensaje Responder +GET /api/v2/proyectos/:id/tickets Listar tickets +PUT /api/v2/proyectos/:id/tickets/:ticketID/estado Cambiar estado +POST /api/v2/proyectos/:id/tickets/:ticketID/mensaje Responder Documentos: -GET /hermes/proyectos/:id/documentos Listar -POST /hermes/proyectos/:id/documentos Subir -DELETE /hermes/proyectos/:id/documentos/:docID Eliminar -GET /hermes/proyectos/:id/documentos/:docID/download Descargar +GET /api/v2/proyectos/:id/documentos Listar +POST /api/v2/proyectos/:id/documentos Subir +DELETE /api/v2/proyectos/:id/documentos/:docID Eliminar +GET /api/v2/proyectos/:id/documentos/:docID/download Descargar ──────────────────────────────────────────────────────────────────────────────── TICKETS (global, todos los proyectos) ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/tickets Listar todos -PUT /hermes/tickets/:ticketID/estado Cambiar estado -POST /hermes/tickets/:ticketID/mensaje Responder +GET /api/v2/tickets Listar todos +PUT /api/v2/tickets/:ticketID/estado Cambiar estado +POST /api/v2/tickets/:ticketID/mensaje Responder ──────────────────────────────────────────────────────────────────────────────── TAREAS (Kanban) Estados: pendiente, en_progreso, completada, cancelada ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/tareas Listar (?estado=&asignado_a=&search=) -GET /hermes/tareas/usuarios Usuarios disponibles para asignar -POST /hermes/tareas Crear -GET /hermes/tareas/:id Detalle con comentarios -PUT /hermes/tareas/:id Actualizar -PUT /hermes/tareas/:id/estado Cambiar estado { estado } -DELETE /hermes/tareas/:id Eliminar -POST /hermes/tareas/:id/comentario Agregar comentario +GET /api/v2/tareas Listar (?estado=&asignado_a=&search=) +GET /api/v2/tareas/usuarios Usuarios disponibles para asignar +POST /api/v2/tareas Crear +GET /api/v2/tareas/:id Detalle con comentarios +PUT /api/v2/tareas/:id Actualizar +PUT /api/v2/tareas/:id/estado Cambiar estado { estado } +DELETE /api/v2/tareas/:id Eliminar +POST /api/v2/tareas/:id/comentario Agregar comentario ──────────────────────────────────────────────────────────────────────────────── USUARIOS DEL SISTEMA ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/users Listar -GET /hermes/users/:id Detalle -POST /hermes/users Crear { nombre_usuario, email, password, role_id } -PUT /hermes/users/:id Actualizar -DELETE /hermes/users/:id Eliminar +GET /api/v2/users Listar +GET /api/v2/users/:id Detalle +POST /api/v2/users Crear { nombre_usuario, email, password, role_id } +PUT /api/v2/users/:id Actualizar +DELETE /api/v2/users/:id Eliminar ──────────────────────────────────────────────────────────────────────────────── ROLES ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/roles Listar -POST /hermes/roles Crear -PUT /hermes/roles/:id Actualizar -DELETE /hermes/roles/:id Eliminar +GET /api/v2/roles Listar +POST /api/v2/roles Crear +PUT /api/v2/roles/:id Actualizar +DELETE /api/v2/roles/:id Eliminar ──────────────────────────────────────────────────────────────────────────────── MÓDULOS Y SUBMÓDULOS ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/modules Listar módulos -POST /hermes/modules Crear -PUT /hermes/modules/:id Actualizar -DELETE /hermes/modules/:id Eliminar -GET /hermes/submodules Listar submódulos -POST /hermes/submodules Crear -PUT /hermes/submodules/:id Actualizar -DELETE /hermes/submodules/:id Eliminar +GET /api/v2/modules Listar módulos +POST /api/v2/modules Crear +PUT /api/v2/modules/:id Actualizar +DELETE /api/v2/modules/:id Eliminar +GET /api/v2/submodules Listar submódulos +POST /api/v2/submodules Crear +PUT /api/v2/submodules/:id Actualizar +DELETE /api/v2/submodules/:id Eliminar ──────────────────────────────────────────────────────────────────────────────── PORTAL DE USUARIOS (login externo de clientes) ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/portal-usuarios Listar -GET /hermes/portal-usuarios/:id Detalle -POST /hermes/portal-usuarios Crear -PUT /hermes/portal-usuarios/:id Actualizar -DELETE /hermes/portal-usuarios/:id Eliminar -POST /hermes/portal-usuarios/:id/acceso Agregar acceso a cliente -DELETE /hermes/portal-usuarios/:id/acceso/:clienteID Quitar acceso -POST /hermes/portal-usuarios/:id/send-credentials Enviar credenciales por correo +GET /api/v2/portal-usuarios Listar +GET /api/v2/portal-usuarios/:id Detalle +POST /api/v2/portal-usuarios Crear +PUT /api/v2/portal-usuarios/:id Actualizar +DELETE /api/v2/portal-usuarios/:id Eliminar +POST /api/v2/portal-usuarios/:id/acceso Agregar acceso a cliente +DELETE /api/v2/portal-usuarios/:id/acceso/:clienteID Quitar acceso +POST /api/v2/portal-usuarios/:id/send-credentials Enviar credenciales por correo ──────────────────────────────────────────────────────────────────────────────── SERVIDORES ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/servidores Listar -POST /hermes/servidores Crear -PUT /hermes/servidores/:id Actualizar -DELETE /hermes/servidores/:id Eliminar -GET /hermes/servidores/:id/dashboard Dashboard del servidor -GET /hermes/servidores/:id/metricas-history Historial de métricas +GET /api/v2/servidores Listar +POST /api/v2/servidores Crear +PUT /api/v2/servidores/:id Actualizar +DELETE /api/v2/servidores/:id Eliminar +GET /api/v2/servidores/:id/dashboard Dashboard del servidor +GET /api/v2/servidores/:id/metricas-history Historial de métricas -GET /hermes/prov-servidores Proveedores de servidor (CRUD) -GET /hermes/tipos-servidor Tipos de servidor (CRUD) -GET /hermes/tipos-db Tipos de DB (CRUD) -GET /hermes/conexiones-ssh Conexiones SSH (CRUD) -GET /hermes/conexiones-db Conexiones DB (CRUD) +GET /api/v2/prov-servidores Proveedores de servidor (CRUD) +GET /api/v2/tipos-servidor Tipos de servidor (CRUD) +GET /api/v2/tipos-db Tipos de DB (CRUD) +GET /api/v2/conexiones-ssh Conexiones SSH (CRUD) +GET /api/v2/conexiones-db Conexiones DB (CRUD) ──────────────────────────────────────────────────────────────────────────────── MONITOR DE URLs ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/url-monitors Listar -POST /hermes/url-monitors Crear -PUT /hermes/url-monitors/:id Actualizar -DELETE /hermes/url-monitors/:id Eliminar -POST /hermes/url-monitors/:id/check Chequear ahora -GET /hermes/url-monitors/:id/logs Logs del monitor +GET /api/v2/url-monitors Listar +POST /api/v2/url-monitors Crear +PUT /api/v2/url-monitors/:id Actualizar +DELETE /api/v2/url-monitors/:id Eliminar +POST /api/v2/url-monitors/:id/check Chequear ahora +GET /api/v2/url-monitors/:id/logs Logs del monitor ──────────────────────────────────────────────────────────────────────────────── NOTIFICACIONES ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/plantillas-correo Plantillas de correo (CRUD) -GET /hermes/reglas-notificacion Reglas de notificación (CRUD) -GET /hermes/historial-notificaciones Historial de envíos -POST /hermes/historial-notificaciones/:id/reenviar Reenviar -GET /hermes/smtp-config Config SMTP -POST /hermes/smtp-config Guardar SMTP -GET /hermes/notif-config Config notificaciones por evento -POST /hermes/notif-config Guardar -GET /hermes/servidor-alerta-config Umbrales de alerta -POST /hermes/servidor-alerta-config Guardar umbrales +GET /api/v2/plantillas-correo Plantillas de correo (CRUD) +GET /api/v2/reglas-notificacion Reglas de notificación (CRUD) +GET /api/v2/historial-notificaciones Historial de envíos +POST /api/v2/historial-notificaciones/:id/reenviar Reenviar +GET /api/v2/smtp-config Config SMTP +POST /api/v2/smtp-config Guardar SMTP +GET /api/v2/notif-config Config notificaciones por evento +POST /api/v2/notif-config Guardar +GET /api/v2/servidor-alerta-config Umbrales de alerta +POST /api/v2/servidor-alerta-config Guardar umbrales ──────────────────────────────────────────────────────────────────────────────── TELEGRAM ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/telegram Listar configs -POST /hermes/telegram Crear config -PUT /hermes/telegram/:id Actualizar -DELETE /hermes/telegram/:id Eliminar -POST /hermes/telegram/:id/test Enviar test -POST /hermes/telegram/send Enviar notificación { config_id, message } -GET /hermes/telegram/logs Logs de envíos +GET /api/v2/telegram Listar configs +POST /api/v2/telegram Crear config +PUT /api/v2/telegram/:id Actualizar +DELETE /api/v2/telegram/:id Eliminar +POST /api/v2/telegram/:id/test Enviar test +POST /api/v2/telegram/send Enviar notificación { config_id, message } +GET /api/v2/telegram/logs Logs de envíos ──────────────────────────────────────────────────────────────────────────────── PRODUCTOS SaaS ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/saas Listar productos -POST /hermes/saas Crear -PUT /hermes/saas/:id Actualizar -DELETE /hermes/saas/:id Eliminar -GET /hermes/saas/:id/health Health check +GET /api/v2/saas Listar productos +POST /api/v2/saas Crear +PUT /api/v2/saas/:id Actualizar +DELETE /api/v2/saas/:id Eliminar +GET /api/v2/saas/:id/health Health check -GET /hermes/saas-api Integraciones SaaS (CRUD) -GET /hermes/saas-api/logs Logs de despacho +GET /api/v2/saas-api Integraciones SaaS (CRUD) +GET /api/v2/saas-api/logs Logs de despacho ──────────────────────────────────────────────────────────────────────────────── DOCUMENTACIÓN ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/doc/categorias Categorías (CRUD) -GET /hermes/doc/paginas Páginas (CRUD) -GET /hermes/doc/paginas/:id Detalle de página +GET /api/v2/doc/categorias Categorías (CRUD) +GET /api/v2/doc/paginas Páginas (CRUD) +GET /api/v2/doc/paginas/:id Detalle de página ──────────────────────────────────────────────────────────────────────────────── CONFIGURACIONES DE IA ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/ai-config Listar -GET /hermes/ai-config/select Activas para select -POST /hermes/ai-config Crear -PUT /hermes/ai-config/:id Actualizar -DELETE /hermes/ai-config/:id Eliminar -GET /hermes/ai-config/:id/test Probar +GET /api/v2/ai-config Listar +GET /api/v2/ai-config/select Activas para select +POST /api/v2/ai-config Crear +PUT /api/v2/ai-config/:id Actualizar +DELETE /api/v2/ai-config/:id Eliminar +GET /api/v2/ai-config/:id/test Probar ──────────────────────────────────────────────────────────────────────────────── OSS API (almacenamiento S3/MinIO/Alibaba) ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/oss-api Listar configs -GET /hermes/oss-api/active Configs activas -POST /hermes/oss-api Crear -PUT /hermes/oss-api/:id Actualizar -DELETE /hermes/oss-api/:id Eliminar -GET /hermes/oss-api/browser Explorar archivos (?prefix=&config_id=) -GET /hermes/oss-api/browser/url URL firmada de descarga -POST /hermes/oss-api/browser/upload Subir archivo -DELETE /hermes/oss-api/browser/object Eliminar archivo +GET /api/v2/oss-api Listar configs +GET /api/v2/oss-api/active Configs activas +POST /api/v2/oss-api Crear +PUT /api/v2/oss-api/:id Actualizar +DELETE /api/v2/oss-api/:id Eliminar +GET /api/v2/oss-api/browser Explorar archivos (?prefix=&config_id=) +GET /api/v2/oss-api/browser/url URL firmada de descarga +POST /api/v2/oss-api/browser/upload Subir archivo +DELETE /api/v2/oss-api/browser/object Eliminar archivo ──────────────────────────────────────────────────────────────────────────────── USITE SHIELD ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/shield Config Shield -POST /hermes/shield Guardar config -GET /hermes/shield/health Health check -GET /hermes/shield/logs Logs -GET /hermes/shield/logs/stats Estadísticas -GET /hermes/shield/review-requests Solicitudes de revisión -PUT /hermes/shield/review-requests/:id/approve Aprobar -PUT /hermes/shield/review-requests/:id/reject Rechazar -GET /hermes/shield/whitelist Whitelist (CRUD) -GET /hermes/shield/blacklist Blacklist (CRUD) +GET /api/v2/shield Config Shield +POST /api/v2/shield Guardar config +GET /api/v2/shield/health Health check +GET /api/v2/shield/logs Logs +GET /api/v2/shield/logs/stats Estadísticas +GET /api/v2/shield/review-requests Solicitudes de revisión +PUT /api/v2/shield/review-requests/:id/approve Aprobar +PUT /api/v2/shield/review-requests/:id/reject Rechazar +GET /api/v2/shield/whitelist Whitelist (CRUD) +GET /api/v2/shield/blacklist Blacklist (CRUD) ──────────────────────────────────────────────────────────────────────────────── WEBSMS (LabsMobile) ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/websms/config Ver config -POST /hermes/websms/save Guardar config -POST /hermes/websms/test Enviar SMS de prueba -GET /hermes/websms/logs Logs +GET /api/v2/websms/config Ver config +POST /api/v2/websms/save Guardar config +POST /api/v2/websms/test Enviar SMS de prueba +GET /api/v2/websms/logs Logs ──────────────────────────────────────────────────────────────────────────────── PASARELAS DE PAGO ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/pasarelas/bold/config Config Bold -POST /hermes/pasarelas/bold/save Guardar Bold -GET /hermes/pasarelas/bold/logs Logs webhooks Bold -GET /hermes/pasarelas/dlocal/config Config dLocal -POST /hermes/pasarelas/dlocal/save Guardar dLocal -GET /hermes/pasarelas/dlocal/logs Logs pagos dLocal -GET /hermes/pasarelas/paypal/config Config PayPal -POST /hermes/pasarelas/paypal/save Guardar PayPal +GET /api/v2/pasarelas/bold/config Config Bold +POST /api/v2/pasarelas/bold/save Guardar Bold +GET /api/v2/pasarelas/bold/logs Logs webhooks Bold +GET /api/v2/pasarelas/dlocal/config Config dLocal +POST /api/v2/pasarelas/dlocal/save Guardar dLocal +GET /api/v2/pasarelas/dlocal/logs Logs pagos dLocal +GET /api/v2/pasarelas/paypal/config Config PayPal +POST /api/v2/pasarelas/paypal/save Guardar PayPal ──────────────────────────────────────────────────────────────────────────────── QUERY RUNNER (ejecutar SQL) ──────────────────────────────────────────────────────────────────────────────── -GET /hermes/query-runner/connections Conexiones disponibles -GET /hermes/query-runner/databases Databases (?connection_id=) -GET /hermes/query-runner/tables Tablas (?connection_id=&database=) -GET /hermes/query-runner/test Probar conexión (?connection_id=) -POST /hermes/query-runner/run Ejecutar query { connection_id, database, query } -GET /hermes/query-runner/history Historial -GET /hermes/query-runner/columns Columnas (?connection_id=&database=&table=) +GET /api/v2/query-runner/connections Conexiones disponibles +GET /api/v2/query-runner/databases Databases (?connection_id=) +GET /api/v2/query-runner/tables Tablas (?connection_id=&database=) +GET /api/v2/query-runner/test Probar conexión (?connection_id=) +POST /api/v2/query-runner/run Ejecutar query { connection_id, database, query } +GET /api/v2/query-runner/history Historial +GET /api/v2/query-runner/columns Columnas (?connection_id=&database=&table=) ──────────────────────────────────────────────────────────────────────────────── INTEGRACIONES EXTERNAS ──────────────────────────────────────────────────────────────────────────────── Hostinger: -GET /hermes/hostinger/vps VPS -GET /hermes/hostinger/domains Dominios -GET /hermes/hostinger/dns/:domain DNS de un dominio -GET /hermes/hostinger/orders Órdenes -GET /hermes/hostinger/hosting Hosting +GET /api/v2/hostinger/vps VPS +GET /api/v2/hostinger/domains Dominios +GET /api/v2/hostinger/dns/:domain DNS de un dominio +GET /api/v2/hostinger/orders Órdenes +GET /api/v2/hostinger/hosting Hosting Cloudflare: -GET /hermes/cloudflare/zones Zonas -GET /hermes/cloudflare/zones/:zone_id/dns DNS de una zona -POST /hermes/cloudflare/zones/:zone_id/dns Crear registro DNS -PUT /hermes/cloudflare/zones/:zone_id/dns/:id Actualizar registro DNS -DELETE /hermes/cloudflare/zones/:zone_id/dns/:id Eliminar registro DNS +GET /api/v2/cloudflare/zones Zonas +GET /api/v2/cloudflare/zones/:zone_id/dns DNS de una zona +POST /api/v2/cloudflare/zones/:zone_id/dns Crear registro DNS +PUT /api/v2/cloudflare/zones/:zone_id/dns/:id Actualizar registro DNS +DELETE /api/v2/cloudflare/zones/:zone_id/dns/:id Eliminar registro DNS Coolify: -GET /hermes/coolify/apps Aplicaciones -GET /hermes/coolify/apps/:uuid Detalle app -GET /hermes/coolify/apps/:uuid/start Iniciar -GET /hermes/coolify/apps/:uuid/stop Detener -GET /hermes/coolify/apps/:uuid/restart Reiniciar -POST /hermes/coolify/apps/:uuid/deploy Desplegar -GET /hermes/coolify/servers Servidores Coolify -GET /hermes/coolify/servers/:uuid Detalle servidor -GET /hermes/coolify/servers/:uuid/resources Recursos -GET /hermes/coolify/services Servicios -GET /hermes/coolify/databases Databases -GET /hermes/coolify/projects Proyectos -GET /hermes/coolify/deployments Deployments +GET /api/v2/coolify/apps Aplicaciones +GET /api/v2/coolify/apps/:uuid Detalle app +GET /api/v2/coolify/apps/:uuid/start Iniciar +GET /api/v2/coolify/apps/:uuid/stop Detener +GET /api/v2/coolify/apps/:uuid/restart Reiniciar +POST /api/v2/coolify/apps/:uuid/deploy Desplegar +GET /api/v2/coolify/servers Servidores Coolify +GET /api/v2/coolify/servers/:uuid Detalle servidor +GET /api/v2/coolify/servers/:uuid/resources Recursos +GET /api/v2/coolify/services Servicios +GET /api/v2/coolify/databases Databases +GET /api/v2/coolify/projects Proyectos +GET /api/v2/coolify/deployments Deployments VCard API: -GET /hermes/vcard-api/config Config -GET /hermes/vcard-api/usuarios Usuarios VCard -GET /hermes/vcard-api/usuarios/:id Detalle -GET /hermes/vcard-api/vcards VCards -GET /hermes/vcard-api/planes Planes -GET /hermes/vcard-api/pagos Pagos -GET /hermes/vcard-api/miniwebs Miniwebs +GET /api/v2/vcard-api/config Config +GET /api/v2/vcard-api/usuarios Usuarios VCard +GET /api/v2/vcard-api/usuarios/:id Detalle +GET /api/v2/vcard-api/vcards VCards +GET /api/v2/vcard-api/planes Planes +GET /api/v2/vcard-api/pagos Pagos +GET /api/v2/vcard-api/miniwebs Miniwebs Partner: -GET /hermes/partner-recursos Recursos partner (CRUD) -GET /hermes/partner-comunicados Comunicados partner (CRUD) +GET /api/v2/partner-recursos Recursos partner (CRUD) +GET /api/v2/partner-comunicados Comunicados partner (CRUD) ================================================================================ EJEMPLOS DE USO ================================================================================ # Listar clientes -curl -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ - "https://admin.u-site.app/hermes/clientes?page=1&search=docuxer" +curl -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ + "https://admin.u-site.app/api/v2/clientes?page=1&search=docuxer" # Crear cliente curl -X POST \ - -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ + -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ -H "Content-Type: application/json" \ -d '{"nombre":"Juan Pérez","empresa":"ABC SAS","email":"juan@abc.com"}' \ - https://admin.u-site.app/hermes/clientes + https://admin.u-site.app/api/v2/clientes # Dashboard contabilidad del mes actual -curl -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ - "https://admin.u-site.app/hermes/contabilidad/dashboard?mes=7&anio=2026" +curl -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ + "https://admin.u-site.app/api/v2/contabilidad/dashboard?mes=7&anio=2026" # Crear cuenta por cobrar curl -X POST \ - -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ + -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ -H "Content-Type: application/json" \ -d '{"cliente_id":1,"descripcion":"Factura #100","valor":5000000,"fecha":"2026-07-13","fecha_vencimiento":"2026-08-13"}' \ - https://admin.u-site.app/hermes/contabilidad/cuentas-cobro + https://admin.u-site.app/api/v2/contabilidad/cuentas-cobro # Ejecutar query SQL curl -X POST \ - -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ + -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ -H "Content-Type: application/json" \ -d '{"connection_id":1,"database":"usite","query":"SELECT * FROM clientes LIMIT 10"}' \ - https://admin.u-site.app/hermes/query-runner/run + https://admin.u-site.app/api/v2/query-runner/run # Enviar notificación por Telegram curl -X POST \ - -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ + -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ -H "Content-Type: application/json" \ -d '{"config_id":1,"message":"Alerta: servidor caído"}' \ - https://admin.u-site.app/hermes/telegram/send + https://admin.u-site.app/api/v2/telegram/send # Desplegar app en Coolify curl -X POST \ - -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ - https://admin.u-site.app/hermes/coolify/apps/UUID-DE-LA-APP/deploy + -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ + https://admin.u-site.app/api/v2/coolify/apps/UUID-DE-LA-APP/deploy # Consultar spec completa (JSON) para actualizaciones -curl -H "Authorization: Bearer hk_live_usite_2026_S3cur3K3yH3rm3s" \ - https://admin.u-site.app/hermes/spec +curl -H "Authorization: Bearer ak_live_usite_2026_S3cur3K3yAdm1n" \ + https://admin.u-site.app/api/v2/spec ================================================================================ NOTAS IMPORTANTES ================================================================================ -- Siempre consulta /hermes/spec para ver si hay endpoints nuevos. -- Las cuentas por cobrar usan cliente_id (de /hermes/clientes/select). -- Las cuentas por pagar usan entidad_id (de /hermes/contabilidad/entidades/select). +- Siempre consulta /api/v2/spec para ver si hay endpoints nuevos. +- Las cuentas por cobrar usan cliente_id (de /api/v2/clientes/select). +- Las cuentas por pagar usan entidad_id (de /api/v2/contabilidad/entidades/select). - Los valores monetarios son en COP (pesos colombianos), sin decimales normalmente. - Si un endpoint retorna 401, verifica el API key. -- Si un endpoint retorna 503, el HERMES_API_KEY no está configurado en el servidor. +- Si un endpoint retorna 503, el ADMIN_API_KEY no está configurado en el servidor. ================================================================================ diff --git a/rest/controllers/hermes_spec_controller.go b/rest/controllers/hermes_spec_controller.go index 5446058..61c2e70 100644 --- a/rest/controllers/hermes_spec_controller.go +++ b/rest/controllers/hermes_spec_controller.go @@ -2,496 +2,496 @@ package controllers import "github.com/gofiber/fiber/v2" -func HermesSpec(c *fiber.Ctx) error { +func AdminApiSpec(c *fiber.Ctx) error { spec := fiber.Map{ - "api": "Hermes API — U-Site Admin", + "api": "U-Site Admin API v2", "version": "1.0", - "base": "/hermes", - "auth": "Header Authorization: Bearer o X-API-Key: ", + "base": "/api/v2", + "auth": "Header Authorization: Bearer o X-API-Key: ", "formato": "JSON. GETs con paginación aceptan ?page=1&search=texto. Respuestas: {items, total, totalPages, page} o el objeto directo.", "modulos": []fiber.Map{ { "nombre": "Usuarios", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/users", "desc": "Listar usuarios del sistema"}, - {"method": "GET", "path": "/hermes/users/:id", "desc": "Detalle de un usuario"}, - {"method": "POST", "path": "/hermes/users", "desc": "Crear usuario", "body": "nombre_usuario, email, password, role_id"}, - {"method": "PUT", "path": "/hermes/users/:id", "desc": "Actualizar usuario"}, - {"method": "DELETE", "path": "/hermes/users/:id", "desc": "Eliminar usuario"}, + {"method": "GET", "path": "/api/v2/users", "desc": "Listar usuarios del sistema"}, + {"method": "GET", "path": "/api/v2/users/:id", "desc": "Detalle de un usuario"}, + {"method": "POST", "path": "/api/v2/users", "desc": "Crear usuario", "body": "nombre_usuario, email, password, role_id"}, + {"method": "PUT", "path": "/api/v2/users/:id", "desc": "Actualizar usuario"}, + {"method": "DELETE", "path": "/api/v2/users/:id", "desc": "Eliminar usuario"}, }, }, { "nombre": "Roles", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/roles", "desc": "Listar roles"}, - {"method": "POST", "path": "/hermes/roles", "desc": "Crear rol"}, - {"method": "PUT", "path": "/hermes/roles/:id", "desc": "Actualizar rol"}, - {"method": "DELETE", "path": "/hermes/roles/:id", "desc": "Eliminar rol"}, + {"method": "GET", "path": "/api/v2/roles", "desc": "Listar roles"}, + {"method": "POST", "path": "/api/v2/roles", "desc": "Crear rol"}, + {"method": "PUT", "path": "/api/v2/roles/:id", "desc": "Actualizar rol"}, + {"method": "DELETE", "path": "/api/v2/roles/:id", "desc": "Eliminar rol"}, }, }, { "nombre": "Módulos", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/modules", "desc": "Listar módulos"}, - {"method": "POST", "path": "/hermes/modules", "desc": "Crear módulo"}, - {"method": "PUT", "path": "/hermes/modules/:id", "desc": "Actualizar módulo"}, - {"method": "DELETE", "path": "/hermes/modules/:id", "desc": "Eliminar módulo"}, + {"method": "GET", "path": "/api/v2/modules", "desc": "Listar módulos"}, + {"method": "POST", "path": "/api/v2/modules", "desc": "Crear módulo"}, + {"method": "PUT", "path": "/api/v2/modules/:id", "desc": "Actualizar módulo"}, + {"method": "DELETE", "path": "/api/v2/modules/:id", "desc": "Eliminar módulo"}, }, }, { "nombre": "Submódulos", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/submodules", "desc": "Listar submódulos"}, - {"method": "POST", "path": "/hermes/submodules", "desc": "Crear submódulo"}, - {"method": "PUT", "path": "/hermes/submodules/:id", "desc": "Actualizar submódulo"}, - {"method": "DELETE", "path": "/hermes/submodules/:id", "desc": "Eliminar submódulo"}, + {"method": "GET", "path": "/api/v2/submodules", "desc": "Listar submódulos"}, + {"method": "POST", "path": "/api/v2/submodules", "desc": "Crear submódulo"}, + {"method": "PUT", "path": "/api/v2/submodules/:id", "desc": "Actualizar submódulo"}, + {"method": "DELETE", "path": "/api/v2/submodules/:id", "desc": "Eliminar submódulo"}, }, }, { "nombre": "Servidores", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/servidores", "desc": "Listar servidores"}, - {"method": "POST", "path": "/hermes/servidores", "desc": "Crear servidor"}, - {"method": "PUT", "path": "/hermes/servidores/:id", "desc": "Actualizar servidor"}, - {"method": "DELETE", "path": "/hermes/servidores/:id", "desc": "Eliminar servidor"}, - {"method": "GET", "path": "/hermes/servidores/:id/dashboard", "desc": "Dashboard de un servidor"}, - {"method": "GET", "path": "/hermes/servidores/:id/metricas-history", "desc": "Historial de métricas"}, + {"method": "GET", "path": "/api/v2/servidores", "desc": "Listar servidores"}, + {"method": "POST", "path": "/api/v2/servidores", "desc": "Crear servidor"}, + {"method": "PUT", "path": "/api/v2/servidores/:id", "desc": "Actualizar servidor"}, + {"method": "DELETE", "path": "/api/v2/servidores/:id", "desc": "Eliminar servidor"}, + {"method": "GET", "path": "/api/v2/servidores/:id/dashboard", "desc": "Dashboard de un servidor"}, + {"method": "GET", "path": "/api/v2/servidores/:id/metricas-history", "desc": "Historial de métricas"}, }, }, { "nombre": "Proveedores de servidor", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/prov-servidores", "desc": "Listar proveedores"}, - {"method": "POST", "path": "/hermes/prov-servidores", "desc": "Crear proveedor"}, - {"method": "PUT", "path": "/hermes/prov-servidores/:id", "desc": "Actualizar proveedor"}, - {"method": "DELETE", "path": "/hermes/prov-servidores/:id", "desc": "Eliminar proveedor"}, + {"method": "GET", "path": "/api/v2/prov-servidores", "desc": "Listar proveedores"}, + {"method": "POST", "path": "/api/v2/prov-servidores", "desc": "Crear proveedor"}, + {"method": "PUT", "path": "/api/v2/prov-servidores/:id", "desc": "Actualizar proveedor"}, + {"method": "DELETE", "path": "/api/v2/prov-servidores/:id", "desc": "Eliminar proveedor"}, }, }, { "nombre": "Tipos de servidor", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/tipos-servidor", "desc": "Listar tipos"}, - {"method": "POST", "path": "/hermes/tipos-servidor", "desc": "Crear tipo"}, - {"method": "PUT", "path": "/hermes/tipos-servidor/:id", "desc": "Actualizar tipo"}, - {"method": "DELETE", "path": "/hermes/tipos-servidor/:id", "desc": "Eliminar tipo"}, + {"method": "GET", "path": "/api/v2/tipos-servidor", "desc": "Listar tipos"}, + {"method": "POST", "path": "/api/v2/tipos-servidor", "desc": "Crear tipo"}, + {"method": "PUT", "path": "/api/v2/tipos-servidor/:id", "desc": "Actualizar tipo"}, + {"method": "DELETE", "path": "/api/v2/tipos-servidor/:id", "desc": "Eliminar tipo"}, }, }, { "nombre": "Tipos de DB", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/tipos-db", "desc": "Listar tipos DB"}, - {"method": "POST", "path": "/hermes/tipos-db", "desc": "Crear tipo DB"}, - {"method": "PUT", "path": "/hermes/tipos-db/:id", "desc": "Actualizar tipo DB"}, - {"method": "DELETE", "path": "/hermes/tipos-db/:id", "desc": "Eliminar tipo DB"}, + {"method": "GET", "path": "/api/v2/tipos-db", "desc": "Listar tipos DB"}, + {"method": "POST", "path": "/api/v2/tipos-db", "desc": "Crear tipo DB"}, + {"method": "PUT", "path": "/api/v2/tipos-db/:id", "desc": "Actualizar tipo DB"}, + {"method": "DELETE", "path": "/api/v2/tipos-db/:id", "desc": "Eliminar tipo DB"}, }, }, { "nombre": "Conexiones SSH", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/conexiones-ssh", "desc": "Listar conexiones SSH"}, - {"method": "POST", "path": "/hermes/conexiones-ssh", "desc": "Crear conexión SSH"}, - {"method": "PUT", "path": "/hermes/conexiones-ssh/:id", "desc": "Actualizar conexión SSH"}, - {"method": "DELETE", "path": "/hermes/conexiones-ssh/:id", "desc": "Eliminar conexión SSH"}, + {"method": "GET", "path": "/api/v2/conexiones-ssh", "desc": "Listar conexiones SSH"}, + {"method": "POST", "path": "/api/v2/conexiones-ssh", "desc": "Crear conexión SSH"}, + {"method": "PUT", "path": "/api/v2/conexiones-ssh/:id", "desc": "Actualizar conexión SSH"}, + {"method": "DELETE", "path": "/api/v2/conexiones-ssh/:id", "desc": "Eliminar conexión SSH"}, }, }, { "nombre": "Conexiones DB", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/conexiones-db", "desc": "Listar conexiones DB"}, - {"method": "GET", "path": "/hermes/conexiones-db/select", "desc": "Select de conexiones DB (filtrable por ?servidor_id=)"}, - {"method": "POST", "path": "/hermes/conexiones-db", "desc": "Crear conexión DB"}, - {"method": "PUT", "path": "/hermes/conexiones-db/:id", "desc": "Actualizar conexión DB"}, - {"method": "DELETE", "path": "/hermes/conexiones-db/:id", "desc": "Eliminar conexión DB"}, + {"method": "GET", "path": "/api/v2/conexiones-db", "desc": "Listar conexiones DB"}, + {"method": "GET", "path": "/api/v2/conexiones-db/select", "desc": "Select de conexiones DB (filtrable por ?servidor_id=)"}, + {"method": "POST", "path": "/api/v2/conexiones-db", "desc": "Crear conexión DB"}, + {"method": "PUT", "path": "/api/v2/conexiones-db/:id", "desc": "Actualizar conexión DB"}, + {"method": "DELETE", "path": "/api/v2/conexiones-db/:id", "desc": "Eliminar conexión DB"}, }, }, { "nombre": "Clientes", "desc": "Clientes de la empresa (tabla clientes). Usados en contratos, cuentas por cobrar, portal.", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/clientes", "desc": "Listar clientes. Query: ?page=1&limit=10&search=texto"}, - {"method": "GET", "path": "/hermes/clientes/select", "desc": "Clientes activos para select/dropdown"}, - {"method": "POST", "path": "/hermes/clientes", "desc": "Crear cliente", "body": "nombre, empresa, email, email_cc, telefono, documento, notas"}, - {"method": "PUT", "path": "/hermes/clientes/:id", "desc": "Actualizar cliente"}, - {"method": "DELETE", "path": "/hermes/clientes/:id", "desc": "Eliminar cliente"}, - {"method": "GET", "path": "/hermes/clientes/:clienteID/documentos", "desc": "Documentos del cliente"}, - {"method": "POST", "path": "/hermes/clientes/:clienteID/documentos", "desc": "Subir documentos (multipart)"}, - {"method": "DELETE", "path": "/hermes/clientes/:clienteID/documentos/:docID", "desc": "Eliminar documento"}, - {"method": "GET", "path": "/hermes/clientes/:clienteID/documentos/:docID/download", "desc": "Descargar documento"}, + {"method": "GET", "path": "/api/v2/clientes", "desc": "Listar clientes. Query: ?page=1&limit=10&search=texto"}, + {"method": "GET", "path": "/api/v2/clientes/select", "desc": "Clientes activos para select/dropdown"}, + {"method": "POST", "path": "/api/v2/clientes", "desc": "Crear cliente", "body": "nombre, empresa, email, email_cc, telefono, documento, notas"}, + {"method": "PUT", "path": "/api/v2/clientes/:id", "desc": "Actualizar cliente"}, + {"method": "DELETE", "path": "/api/v2/clientes/:id", "desc": "Eliminar cliente"}, + {"method": "GET", "path": "/api/v2/clientes/:clienteID/documentos", "desc": "Documentos del cliente"}, + {"method": "POST", "path": "/api/v2/clientes/:clienteID/documentos", "desc": "Subir documentos (multipart)"}, + {"method": "DELETE", "path": "/api/v2/clientes/:clienteID/documentos/:docID", "desc": "Eliminar documento"}, + {"method": "GET", "path": "/api/v2/clientes/:clienteID/documentos/:docID/download", "desc": "Descargar documento"}, }, }, { "nombre": "Servicios", "desc": "Tipos de servicio ofrecidos (hosting, dominio, desarrollo, etc.)", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/servicios", "desc": "Listar servicios"}, - {"method": "GET", "path": "/hermes/servicios/select", "desc": "Servicios activos para select"}, - {"method": "POST", "path": "/hermes/servicios", "desc": "Crear servicio"}, - {"method": "PUT", "path": "/hermes/servicios/:id", "desc": "Actualizar servicio"}, - {"method": "DELETE", "path": "/hermes/servicios/:id", "desc": "Eliminar servicio"}, + {"method": "GET", "path": "/api/v2/servicios", "desc": "Listar servicios"}, + {"method": "GET", "path": "/api/v2/servicios/select", "desc": "Servicios activos para select"}, + {"method": "POST", "path": "/api/v2/servicios", "desc": "Crear servicio"}, + {"method": "PUT", "path": "/api/v2/servicios/:id", "desc": "Actualizar servicio"}, + {"method": "DELETE", "path": "/api/v2/servicios/:id", "desc": "Eliminar servicio"}, }, }, { "nombre": "Contratos", "desc": "Contratos de servicio con clientes. Tienen ciclo de renovación y notificaciones automáticas.", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/contratos", "desc": "Listar contratos. Query: ?page=1&search=&estado=&servicio_id="}, - {"method": "POST", "path": "/hermes/contratos", "desc": "Crear contrato"}, - {"method": "PUT", "path": "/hermes/contratos/:id", "desc": "Actualizar contrato"}, - {"method": "DELETE", "path": "/hermes/contratos/:id", "desc": "Eliminar contrato"}, - {"method": "POST", "path": "/hermes/contratos/:id/renovar", "desc": "Renovar contrato"}, - {"method": "POST", "path": "/hermes/contratos/:id/enviar-correo", "desc": "Enviar correo de notificación"}, - {"method": "GET", "path": "/hermes/contratos/:id/historial", "desc": "Historial del contrato"}, - {"method": "POST", "path": "/hermes/contratos/:id/verificar-pago", "desc": "Verificar pago Bold"}, - {"method": "POST", "path": "/hermes/contratos/:id/marcar-pagado", "desc": "Marcar pago manual"}, + {"method": "GET", "path": "/api/v2/contratos", "desc": "Listar contratos. Query: ?page=1&search=&estado=&servicio_id="}, + {"method": "POST", "path": "/api/v2/contratos", "desc": "Crear contrato"}, + {"method": "PUT", "path": "/api/v2/contratos/:id", "desc": "Actualizar contrato"}, + {"method": "DELETE", "path": "/api/v2/contratos/:id", "desc": "Eliminar contrato"}, + {"method": "POST", "path": "/api/v2/contratos/:id/renovar", "desc": "Renovar contrato"}, + {"method": "POST", "path": "/api/v2/contratos/:id/enviar-correo", "desc": "Enviar correo de notificación"}, + {"method": "GET", "path": "/api/v2/contratos/:id/historial", "desc": "Historial del contrato"}, + {"method": "POST", "path": "/api/v2/contratos/:id/verificar-pago", "desc": "Verificar pago Bold"}, + {"method": "POST", "path": "/api/v2/contratos/:id/marcar-pagado", "desc": "Marcar pago manual"}, }, }, { "nombre": "Plantillas de correo", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/plantillas-correo", "desc": "Listar plantillas"}, - {"method": "POST", "path": "/hermes/plantillas-correo", "desc": "Crear plantilla"}, - {"method": "PUT", "path": "/hermes/plantillas-correo/:id", "desc": "Actualizar plantilla"}, - {"method": "DELETE", "path": "/hermes/plantillas-correo/:id", "desc": "Eliminar plantilla"}, - {"method": "GET", "path": "/hermes/plantillas-correo/:id/preview", "desc": "Vista previa"}, + {"method": "GET", "path": "/api/v2/plantillas-correo", "desc": "Listar plantillas"}, + {"method": "POST", "path": "/api/v2/plantillas-correo", "desc": "Crear plantilla"}, + {"method": "PUT", "path": "/api/v2/plantillas-correo/:id", "desc": "Actualizar plantilla"}, + {"method": "DELETE", "path": "/api/v2/plantillas-correo/:id", "desc": "Eliminar plantilla"}, + {"method": "GET", "path": "/api/v2/plantillas-correo/:id/preview", "desc": "Vista previa"}, }, }, { "nombre": "Reglas de notificación", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/reglas-notificacion", "desc": "Listar reglas"}, - {"method": "POST", "path": "/hermes/reglas-notificacion", "desc": "Crear regla"}, - {"method": "PUT", "path": "/hermes/reglas-notificacion/:id", "desc": "Actualizar regla"}, - {"method": "DELETE", "path": "/hermes/reglas-notificacion/:id", "desc": "Eliminar regla"}, + {"method": "GET", "path": "/api/v2/reglas-notificacion", "desc": "Listar reglas"}, + {"method": "POST", "path": "/api/v2/reglas-notificacion", "desc": "Crear regla"}, + {"method": "PUT", "path": "/api/v2/reglas-notificacion/:id", "desc": "Actualizar regla"}, + {"method": "DELETE", "path": "/api/v2/reglas-notificacion/:id", "desc": "Eliminar regla"}, }, }, { "nombre": "Historial de notificaciones", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/historial-notificaciones", "desc": "Listar historial"}, - {"method": "POST", "path": "/hermes/historial-notificaciones/:id/reenviar", "desc": "Reenviar notificación"}, + {"method": "GET", "path": "/api/v2/historial-notificaciones", "desc": "Listar historial"}, + {"method": "POST", "path": "/api/v2/historial-notificaciones/:id/reenviar", "desc": "Reenviar notificación"}, }, }, { "nombre": "SMTP Config", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/smtp-config", "desc": "Ver configuración SMTP"}, - {"method": "POST", "path": "/hermes/smtp-config", "desc": "Guardar configuración SMTP"}, + {"method": "GET", "path": "/api/v2/smtp-config", "desc": "Ver configuración SMTP"}, + {"method": "POST", "path": "/api/v2/smtp-config", "desc": "Guardar configuración SMTP"}, }, }, { "nombre": "Tareas (Kanban)", "desc": "Tablero de tareas con estados: pendiente, en_progreso, completada, cancelada", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/tareas", "desc": "Listar tareas. Query: ?estado=&asignado_a=&search="}, - {"method": "GET", "path": "/hermes/tareas/usuarios", "desc": "Usuarios del sistema para asignar"}, - {"method": "POST", "path": "/hermes/tareas", "desc": "Crear tarea"}, - {"method": "GET", "path": "/hermes/tareas/:id", "desc": "Detalle de tarea con comentarios"}, - {"method": "PUT", "path": "/hermes/tareas/:id", "desc": "Actualizar tarea"}, - {"method": "PUT", "path": "/hermes/tareas/:id/estado", "desc": "Cambiar estado", "body": "estado"}, - {"method": "DELETE", "path": "/hermes/tareas/:id", "desc": "Eliminar tarea"}, - {"method": "POST", "path": "/hermes/tareas/:id/comentario", "desc": "Agregar comentario"}, + {"method": "GET", "path": "/api/v2/tareas", "desc": "Listar tareas. Query: ?estado=&asignado_a=&search="}, + {"method": "GET", "path": "/api/v2/tareas/usuarios", "desc": "Usuarios del sistema para asignar"}, + {"method": "POST", "path": "/api/v2/tareas", "desc": "Crear tarea"}, + {"method": "GET", "path": "/api/v2/tareas/:id", "desc": "Detalle de tarea con comentarios"}, + {"method": "PUT", "path": "/api/v2/tareas/:id", "desc": "Actualizar tarea"}, + {"method": "PUT", "path": "/api/v2/tareas/:id/estado", "desc": "Cambiar estado", "body": "estado"}, + {"method": "DELETE", "path": "/api/v2/tareas/:id", "desc": "Eliminar tarea"}, + {"method": "POST", "path": "/api/v2/tareas/:id/comentario", "desc": "Agregar comentario"}, }, }, { "nombre": "Monitor de URLs", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/url-monitors", "desc": "Listar monitores"}, - {"method": "POST", "path": "/hermes/url-monitors", "desc": "Crear monitor"}, - {"method": "PUT", "path": "/hermes/url-monitors/:id", "desc": "Actualizar monitor"}, - {"method": "DELETE", "path": "/hermes/url-monitors/:id", "desc": "Eliminar monitor"}, - {"method": "POST", "path": "/hermes/url-monitors/:id/check", "desc": "Chequear ahora"}, - {"method": "GET", "path": "/hermes/url-monitors/:id/logs", "desc": "Logs del monitor"}, + {"method": "GET", "path": "/api/v2/url-monitors", "desc": "Listar monitores"}, + {"method": "POST", "path": "/api/v2/url-monitors", "desc": "Crear monitor"}, + {"method": "PUT", "path": "/api/v2/url-monitors/:id", "desc": "Actualizar monitor"}, + {"method": "DELETE", "path": "/api/v2/url-monitors/:id", "desc": "Eliminar monitor"}, + {"method": "POST", "path": "/api/v2/url-monitors/:id/check", "desc": "Chequear ahora"}, + {"method": "GET", "path": "/api/v2/url-monitors/:id/logs", "desc": "Logs del monitor"}, }, }, { "nombre": "Proyectos", "desc": "Proyectos del portal de clientes. Contienen fases, avances, entregables, tickets y documentos.", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/proyectos", "desc": "Listar proyectos"}, - {"method": "POST", "path": "/hermes/proyectos", "desc": "Crear proyecto"}, - {"method": "PUT", "path": "/hermes/proyectos/:id", "desc": "Actualizar proyecto"}, - {"method": "DELETE", "path": "/hermes/proyectos/:id", "desc": "Eliminar proyecto"}, - {"method": "GET", "path": "/hermes/proyectos/:id/fases", "desc": "Listar fases"}, - {"method": "POST", "path": "/hermes/proyectos/:id/fases", "desc": "Crear fase"}, - {"method": "PUT", "path": "/hermes/proyectos/:id/fases/:faseID", "desc": "Actualizar fase"}, - {"method": "DELETE", "path": "/hermes/proyectos/:id/fases/:faseID", "desc": "Eliminar fase"}, - {"method": "GET", "path": "/hermes/proyectos/:id/avances", "desc": "Listar avances"}, - {"method": "POST", "path": "/hermes/proyectos/:id/avances", "desc": "Crear avance"}, - {"method": "PUT", "path": "/hermes/proyectos/:id/avances/:avID", "desc": "Actualizar avance"}, - {"method": "DELETE", "path": "/hermes/proyectos/:id/avances/:avID", "desc": "Eliminar avance"}, - {"method": "GET", "path": "/hermes/proyectos/:id/entregables", "desc": "Listar entregables"}, - {"method": "POST", "path": "/hermes/proyectos/:id/entregables", "desc": "Subir entregable"}, - {"method": "DELETE", "path": "/hermes/proyectos/:id/entregables/:entID", "desc": "Eliminar entregable"}, - {"method": "GET", "path": "/hermes/proyectos/:id/entregables/:entID/download", "desc": "Descargar entregable"}, - {"method": "GET", "path": "/hermes/proyectos/:id/tickets", "desc": "Listar tickets del proyecto"}, - {"method": "PUT", "path": "/hermes/proyectos/:id/tickets/:ticketID/estado", "desc": "Cambiar estado ticket"}, - {"method": "POST", "path": "/hermes/proyectos/:id/tickets/:ticketID/mensaje", "desc": "Responder ticket"}, - {"method": "GET", "path": "/hermes/proyectos/:id/documentos", "desc": "Listar documentos"}, - {"method": "POST", "path": "/hermes/proyectos/:id/documentos", "desc": "Subir documento"}, - {"method": "DELETE", "path": "/hermes/proyectos/:id/documentos/:docID", "desc": "Eliminar documento"}, - {"method": "GET", "path": "/hermes/proyectos/:id/documentos/:docID/download", "desc": "Descargar documento"}, + {"method": "GET", "path": "/api/v2/proyectos", "desc": "Listar proyectos"}, + {"method": "POST", "path": "/api/v2/proyectos", "desc": "Crear proyecto"}, + {"method": "PUT", "path": "/api/v2/proyectos/:id", "desc": "Actualizar proyecto"}, + {"method": "DELETE", "path": "/api/v2/proyectos/:id", "desc": "Eliminar proyecto"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/fases", "desc": "Listar fases"}, + {"method": "POST", "path": "/api/v2/proyectos/:id/fases", "desc": "Crear fase"}, + {"method": "PUT", "path": "/api/v2/proyectos/:id/fases/:faseID", "desc": "Actualizar fase"}, + {"method": "DELETE", "path": "/api/v2/proyectos/:id/fases/:faseID", "desc": "Eliminar fase"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/avances", "desc": "Listar avances"}, + {"method": "POST", "path": "/api/v2/proyectos/:id/avances", "desc": "Crear avance"}, + {"method": "PUT", "path": "/api/v2/proyectos/:id/avances/:avID", "desc": "Actualizar avance"}, + {"method": "DELETE", "path": "/api/v2/proyectos/:id/avances/:avID", "desc": "Eliminar avance"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/entregables", "desc": "Listar entregables"}, + {"method": "POST", "path": "/api/v2/proyectos/:id/entregables", "desc": "Subir entregable"}, + {"method": "DELETE", "path": "/api/v2/proyectos/:id/entregables/:entID", "desc": "Eliminar entregable"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/entregables/:entID/download", "desc": "Descargar entregable"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/tickets", "desc": "Listar tickets del proyecto"}, + {"method": "PUT", "path": "/api/v2/proyectos/:id/tickets/:ticketID/estado", "desc": "Cambiar estado ticket"}, + {"method": "POST", "path": "/api/v2/proyectos/:id/tickets/:ticketID/mensaje", "desc": "Responder ticket"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/documentos", "desc": "Listar documentos"}, + {"method": "POST", "path": "/api/v2/proyectos/:id/documentos", "desc": "Subir documento"}, + {"method": "DELETE", "path": "/api/v2/proyectos/:id/documentos/:docID", "desc": "Eliminar documento"}, + {"method": "GET", "path": "/api/v2/proyectos/:id/documentos/:docID/download", "desc": "Descargar documento"}, }, }, { "nombre": "Portal de Usuarios", "desc": "Usuarios del portal de clientes (login externo). Tienen accesos vinculados a clientes.", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/portal-usuarios", "desc": "Listar usuarios portal"}, - {"method": "GET", "path": "/hermes/portal-usuarios/:id", "desc": "Detalle usuario portal"}, - {"method": "POST", "path": "/hermes/portal-usuarios", "desc": "Crear usuario portal"}, - {"method": "PUT", "path": "/hermes/portal-usuarios/:id", "desc": "Actualizar usuario portal"}, - {"method": "DELETE", "path": "/hermes/portal-usuarios/:id", "desc": "Eliminar usuario portal"}, - {"method": "POST", "path": "/hermes/portal-usuarios/:id/acceso", "desc": "Agregar acceso a cliente"}, - {"method": "DELETE", "path": "/hermes/portal-usuarios/:id/acceso/:clienteID", "desc": "Quitar acceso a cliente"}, - {"method": "POST", "path": "/hermes/portal-usuarios/:id/send-credentials", "desc": "Enviar credenciales por correo"}, + {"method": "GET", "path": "/api/v2/portal-usuarios", "desc": "Listar usuarios portal"}, + {"method": "GET", "path": "/api/v2/portal-usuarios/:id", "desc": "Detalle usuario portal"}, + {"method": "POST", "path": "/api/v2/portal-usuarios", "desc": "Crear usuario portal"}, + {"method": "PUT", "path": "/api/v2/portal-usuarios/:id", "desc": "Actualizar usuario portal"}, + {"method": "DELETE", "path": "/api/v2/portal-usuarios/:id", "desc": "Eliminar usuario portal"}, + {"method": "POST", "path": "/api/v2/portal-usuarios/:id/acceso", "desc": "Agregar acceso a cliente"}, + {"method": "DELETE", "path": "/api/v2/portal-usuarios/:id/acceso/:clienteID", "desc": "Quitar acceso a cliente"}, + {"method": "POST", "path": "/api/v2/portal-usuarios/:id/send-credentials", "desc": "Enviar credenciales por correo"}, }, }, { "nombre": "Facturas", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/facturas", "desc": "Listar facturas"}, - {"method": "POST", "path": "/hermes/facturas", "desc": "Crear factura"}, - {"method": "PUT", "path": "/hermes/facturas/:id", "desc": "Actualizar factura"}, - {"method": "DELETE", "path": "/hermes/facturas/:id", "desc": "Eliminar factura"}, - {"method": "POST", "path": "/hermes/facturas/:id/upload-pdf", "desc": "Subir PDF de factura"}, - {"method": "GET", "path": "/hermes/facturas/:id/download", "desc": "Descargar PDF factura"}, + {"method": "GET", "path": "/api/v2/facturas", "desc": "Listar facturas"}, + {"method": "POST", "path": "/api/v2/facturas", "desc": "Crear factura"}, + {"method": "PUT", "path": "/api/v2/facturas/:id", "desc": "Actualizar factura"}, + {"method": "DELETE", "path": "/api/v2/facturas/:id", "desc": "Eliminar factura"}, + {"method": "POST", "path": "/api/v2/facturas/:id/upload-pdf", "desc": "Subir PDF de factura"}, + {"method": "GET", "path": "/api/v2/facturas/:id/download", "desc": "Descargar PDF factura"}, }, }, { "nombre": "Tickets (global)", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/tickets", "desc": "Listar todos los tickets"}, - {"method": "PUT", "path": "/hermes/tickets/:ticketID/estado", "desc": "Cambiar estado"}, - {"method": "POST", "path": "/hermes/tickets/:ticketID/mensaje", "desc": "Responder ticket"}, + {"method": "GET", "path": "/api/v2/tickets", "desc": "Listar todos los tickets"}, + {"method": "PUT", "path": "/api/v2/tickets/:ticketID/estado", "desc": "Cambiar estado"}, + {"method": "POST", "path": "/api/v2/tickets/:ticketID/mensaje", "desc": "Responder ticket"}, }, }, { "nombre": "Contabilidad", "desc": "Sistema contable: transacciones (ingresos/egresos), cuentas, entidades, cuentas por cobrar/pagar, consolidados.", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/contabilidad/dashboard", "desc": "Dashboard. Query: ?mes=7&anio=2026"}, - {"method": "GET", "path": "/hermes/contabilidad/consolidado", "desc": "Calcular consolidado mensual. Query: ?mes=&anio="}, - {"method": "GET", "path": "/hermes/contabilidad/consolidados", "desc": "Listar consolidados. Query: ?anio="}, - {"method": "GET", "path": "/hermes/contabilidad/transacciones", "desc": "Listar transacciones. Query: ?page=&search=&tipo=ingreso|egreso&mes=&anio="}, - {"method": "POST", "path": "/hermes/contabilidad/transacciones", "desc": "Crear transacción", "body": "fecha, tipo, descripcion, valor, cuenta_id, entidad_id, forma_pago, estado, notas"}, - {"method": "PUT", "path": "/hermes/contabilidad/transacciones/:id", "desc": "Actualizar transacción"}, - {"method": "DELETE", "path": "/hermes/contabilidad/transacciones/:id", "desc": "Eliminar transacción"}, - {"method": "GET", "path": "/hermes/contabilidad/cuentas", "desc": "Listar categorías contables"}, - {"method": "GET", "path": "/hermes/contabilidad/cuentas/select", "desc": "Categorías activas para select"}, - {"method": "POST", "path": "/hermes/contabilidad/cuentas", "desc": "Crear categoría", "body": "codigo, nombre, tipo(ingreso|egreso), color"}, - {"method": "PUT", "path": "/hermes/contabilidad/cuentas/:id", "desc": "Actualizar categoría"}, - {"method": "DELETE", "path": "/hermes/contabilidad/cuentas/:id", "desc": "Eliminar categoría"}, - {"method": "GET", "path": "/hermes/contabilidad/entidades", "desc": "Listar entidades contables"}, - {"method": "GET", "path": "/hermes/contabilidad/entidades/select", "desc": "Entidades activas para select"}, - {"method": "POST", "path": "/hermes/contabilidad/entidades", "desc": "Crear entidad", "body": "nombre, tipo(cliente|proveedor|ambos), documento, email, telefono"}, - {"method": "PUT", "path": "/hermes/contabilidad/entidades/:id", "desc": "Actualizar entidad"}, - {"method": "DELETE", "path": "/hermes/contabilidad/entidades/:id", "desc": "Eliminar entidad"}, - {"method": "GET", "path": "/hermes/contabilidad/cuentas-cobro", "desc": "Listar cuentas por cobrar. Query: ?page=&search=&estado="}, - {"method": "POST", "path": "/hermes/contabilidad/cuentas-cobro", "desc": "Crear cuenta por cobrar", "body": "cliente_id, descripcion, valor, fecha, fecha_vencimiento, notas"}, - {"method": "PUT", "path": "/hermes/contabilidad/cuentas-cobro/:id", "desc": "Actualizar cuenta por cobrar"}, - {"method": "DELETE", "path": "/hermes/contabilidad/cuentas-cobro/:id", "desc": "Eliminar cuenta por cobrar"}, - {"method": "GET", "path": "/hermes/contabilidad/cuentas-pagar", "desc": "Listar cuentas por pagar. Query: ?page=&search=&estado="}, - {"method": "POST", "path": "/hermes/contabilidad/cuentas-pagar", "desc": "Crear cuenta por pagar", "body": "entidad_id, descripcion, valor, fecha, vencimiento, notas"}, - {"method": "PUT", "path": "/hermes/contabilidad/cuentas-pagar/:id", "desc": "Actualizar cuenta por pagar"}, - {"method": "POST", "path": "/hermes/contabilidad/cuentas-pagar/:id/pagar", "desc": "Marcar como pagada", "body": "fecha_pago"}, - {"method": "DELETE", "path": "/hermes/contabilidad/cuentas-pagar/:id", "desc": "Eliminar cuenta por pagar"}, + {"method": "GET", "path": "/api/v2/contabilidad/dashboard", "desc": "Dashboard. Query: ?mes=7&anio=2026"}, + {"method": "GET", "path": "/api/v2/contabilidad/consolidado", "desc": "Calcular consolidado mensual. Query: ?mes=&anio="}, + {"method": "GET", "path": "/api/v2/contabilidad/consolidados", "desc": "Listar consolidados. Query: ?anio="}, + {"method": "GET", "path": "/api/v2/contabilidad/transacciones", "desc": "Listar transacciones. Query: ?page=&search=&tipo=ingreso|egreso&mes=&anio="}, + {"method": "POST", "path": "/api/v2/contabilidad/transacciones", "desc": "Crear transacción", "body": "fecha, tipo, descripcion, valor, cuenta_id, entidad_id, forma_pago, estado, notas"}, + {"method": "PUT", "path": "/api/v2/contabilidad/transacciones/:id", "desc": "Actualizar transacción"}, + {"method": "DELETE", "path": "/api/v2/contabilidad/transacciones/:id", "desc": "Eliminar transacción"}, + {"method": "GET", "path": "/api/v2/contabilidad/cuentas", "desc": "Listar categorías contables"}, + {"method": "GET", "path": "/api/v2/contabilidad/cuentas/select", "desc": "Categorías activas para select"}, + {"method": "POST", "path": "/api/v2/contabilidad/cuentas", "desc": "Crear categoría", "body": "codigo, nombre, tipo(ingreso|egreso), color"}, + {"method": "PUT", "path": "/api/v2/contabilidad/cuentas/:id", "desc": "Actualizar categoría"}, + {"method": "DELETE", "path": "/api/v2/contabilidad/cuentas/:id", "desc": "Eliminar categoría"}, + {"method": "GET", "path": "/api/v2/contabilidad/entidades", "desc": "Listar entidades contables"}, + {"method": "GET", "path": "/api/v2/contabilidad/entidades/select", "desc": "Entidades activas para select"}, + {"method": "POST", "path": "/api/v2/contabilidad/entidades", "desc": "Crear entidad", "body": "nombre, tipo(cliente|proveedor|ambos), documento, email, telefono"}, + {"method": "PUT", "path": "/api/v2/contabilidad/entidades/:id", "desc": "Actualizar entidad"}, + {"method": "DELETE", "path": "/api/v2/contabilidad/entidades/:id", "desc": "Eliminar entidad"}, + {"method": "GET", "path": "/api/v2/contabilidad/cuentas-cobro", "desc": "Listar cuentas por cobrar. Query: ?page=&search=&estado="}, + {"method": "POST", "path": "/api/v2/contabilidad/cuentas-cobro", "desc": "Crear cuenta por cobrar", "body": "cliente_id, descripcion, valor, fecha, fecha_vencimiento, notas"}, + {"method": "PUT", "path": "/api/v2/contabilidad/cuentas-cobro/:id", "desc": "Actualizar cuenta por cobrar"}, + {"method": "DELETE", "path": "/api/v2/contabilidad/cuentas-cobro/:id", "desc": "Eliminar cuenta por cobrar"}, + {"method": "GET", "path": "/api/v2/contabilidad/cuentas-pagar", "desc": "Listar cuentas por pagar. Query: ?page=&search=&estado="}, + {"method": "POST", "path": "/api/v2/contabilidad/cuentas-pagar", "desc": "Crear cuenta por pagar", "body": "entidad_id, descripcion, valor, fecha, vencimiento, notas"}, + {"method": "PUT", "path": "/api/v2/contabilidad/cuentas-pagar/:id", "desc": "Actualizar cuenta por pagar"}, + {"method": "POST", "path": "/api/v2/contabilidad/cuentas-pagar/:id/pagar", "desc": "Marcar como pagada", "body": "fecha_pago"}, + {"method": "DELETE", "path": "/api/v2/contabilidad/cuentas-pagar/:id", "desc": "Eliminar cuenta por pagar"}, }, }, { "nombre": "Productos SaaS", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/saas", "desc": "Listar productos SaaS"}, - {"method": "POST", "path": "/hermes/saas", "desc": "Crear producto"}, - {"method": "PUT", "path": "/hermes/saas/:id", "desc": "Actualizar producto"}, - {"method": "DELETE", "path": "/hermes/saas/:id", "desc": "Eliminar producto"}, - {"method": "GET", "path": "/hermes/saas/:id/health", "desc": "Health check del producto"}, + {"method": "GET", "path": "/api/v2/saas", "desc": "Listar productos SaaS"}, + {"method": "POST", "path": "/api/v2/saas", "desc": "Crear producto"}, + {"method": "PUT", "path": "/api/v2/saas/:id", "desc": "Actualizar producto"}, + {"method": "DELETE", "path": "/api/v2/saas/:id", "desc": "Eliminar producto"}, + {"method": "GET", "path": "/api/v2/saas/:id/health", "desc": "Health check del producto"}, }, }, { "nombre": "Integraciones SaaS (dispatcher)", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/saas-api", "desc": "Listar configs de integración"}, - {"method": "POST", "path": "/hermes/saas-api", "desc": "Crear config"}, - {"method": "PUT", "path": "/hermes/saas-api/:id", "desc": "Actualizar config"}, - {"method": "DELETE", "path": "/hermes/saas-api/:id", "desc": "Eliminar config"}, - {"method": "GET", "path": "/hermes/saas-api/logs", "desc": "Logs de despacho"}, + {"method": "GET", "path": "/api/v2/saas-api", "desc": "Listar configs de integración"}, + {"method": "POST", "path": "/api/v2/saas-api", "desc": "Crear config"}, + {"method": "PUT", "path": "/api/v2/saas-api/:id", "desc": "Actualizar config"}, + {"method": "DELETE", "path": "/api/v2/saas-api/:id", "desc": "Eliminar config"}, + {"method": "GET", "path": "/api/v2/saas-api/logs", "desc": "Logs de despacho"}, }, }, { "nombre": "Documentación", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/doc/categorias", "desc": "Listar categorías de docs"}, - {"method": "POST", "path": "/hermes/doc/categorias", "desc": "Crear categoría"}, - {"method": "PUT", "path": "/hermes/doc/categorias/:id", "desc": "Actualizar categoría"}, - {"method": "DELETE", "path": "/hermes/doc/categorias/:id", "desc": "Eliminar categoría"}, - {"method": "GET", "path": "/hermes/doc/paginas", "desc": "Listar páginas de docs"}, - {"method": "GET", "path": "/hermes/doc/paginas/:id", "desc": "Detalle de página"}, - {"method": "POST", "path": "/hermes/doc/paginas", "desc": "Crear página"}, - {"method": "PUT", "path": "/hermes/doc/paginas/:id", "desc": "Actualizar página"}, - {"method": "DELETE", "path": "/hermes/doc/paginas/:id", "desc": "Eliminar página"}, + {"method": "GET", "path": "/api/v2/doc/categorias", "desc": "Listar categorías de docs"}, + {"method": "POST", "path": "/api/v2/doc/categorias", "desc": "Crear categoría"}, + {"method": "PUT", "path": "/api/v2/doc/categorias/:id", "desc": "Actualizar categoría"}, + {"method": "DELETE", "path": "/api/v2/doc/categorias/:id", "desc": "Eliminar categoría"}, + {"method": "GET", "path": "/api/v2/doc/paginas", "desc": "Listar páginas de docs"}, + {"method": "GET", "path": "/api/v2/doc/paginas/:id", "desc": "Detalle de página"}, + {"method": "POST", "path": "/api/v2/doc/paginas", "desc": "Crear página"}, + {"method": "PUT", "path": "/api/v2/doc/paginas/:id", "desc": "Actualizar página"}, + {"method": "DELETE", "path": "/api/v2/doc/paginas/:id", "desc": "Eliminar página"}, }, }, { "nombre": "Configuraciones de IA", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/ai-config", "desc": "Listar configs de IA"}, - {"method": "GET", "path": "/hermes/ai-config/select", "desc": "Configs activas para select"}, - {"method": "POST", "path": "/hermes/ai-config", "desc": "Crear config IA"}, - {"method": "PUT", "path": "/hermes/ai-config/:id", "desc": "Actualizar config"}, - {"method": "DELETE", "path": "/hermes/ai-config/:id", "desc": "Eliminar config"}, - {"method": "GET", "path": "/hermes/ai-config/:id/test", "desc": "Probar config"}, + {"method": "GET", "path": "/api/v2/ai-config", "desc": "Listar configs de IA"}, + {"method": "GET", "path": "/api/v2/ai-config/select", "desc": "Configs activas para select"}, + {"method": "POST", "path": "/api/v2/ai-config", "desc": "Crear config IA"}, + {"method": "PUT", "path": "/api/v2/ai-config/:id", "desc": "Actualizar config"}, + {"method": "DELETE", "path": "/api/v2/ai-config/:id", "desc": "Eliminar config"}, + {"method": "GET", "path": "/api/v2/ai-config/:id/test", "desc": "Probar config"}, }, }, { "nombre": "OSS API (almacenamiento)", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/oss-api", "desc": "Listar configs de almacenamiento"}, - {"method": "GET", "path": "/hermes/oss-api/active", "desc": "Configs activas"}, - {"method": "POST", "path": "/hermes/oss-api", "desc": "Crear config"}, - {"method": "PUT", "path": "/hermes/oss-api/:id", "desc": "Actualizar config"}, - {"method": "DELETE", "path": "/hermes/oss-api/:id", "desc": "Eliminar config"}, - {"method": "GET", "path": "/hermes/oss-api/browser", "desc": "Explorar archivos. Query: ?prefix=&config_id="}, - {"method": "GET", "path": "/hermes/oss-api/browser/url", "desc": "URL firmada para descarga"}, - {"method": "POST", "path": "/hermes/oss-api/browser/upload", "desc": "Subir archivo"}, - {"method": "DELETE", "path": "/hermes/oss-api/browser/object", "desc": "Eliminar archivo"}, + {"method": "GET", "path": "/api/v2/oss-api", "desc": "Listar configs de almacenamiento"}, + {"method": "GET", "path": "/api/v2/oss-api/active", "desc": "Configs activas"}, + {"method": "POST", "path": "/api/v2/oss-api", "desc": "Crear config"}, + {"method": "PUT", "path": "/api/v2/oss-api/:id", "desc": "Actualizar config"}, + {"method": "DELETE", "path": "/api/v2/oss-api/:id", "desc": "Eliminar config"}, + {"method": "GET", "path": "/api/v2/oss-api/browser", "desc": "Explorar archivos. Query: ?prefix=&config_id="}, + {"method": "GET", "path": "/api/v2/oss-api/browser/url", "desc": "URL firmada para descarga"}, + {"method": "POST", "path": "/api/v2/oss-api/browser/upload", "desc": "Subir archivo"}, + {"method": "DELETE", "path": "/api/v2/oss-api/browser/object", "desc": "Eliminar archivo"}, }, }, { "nombre": "Telegram", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/telegram", "desc": "Listar configs de Telegram"}, - {"method": "POST", "path": "/hermes/telegram", "desc": "Crear config"}, - {"method": "PUT", "path": "/hermes/telegram/:id", "desc": "Actualizar config"}, - {"method": "DELETE", "path": "/hermes/telegram/:id", "desc": "Eliminar config"}, - {"method": "POST", "path": "/hermes/telegram/:id/test", "desc": "Enviar test"}, - {"method": "POST", "path": "/hermes/telegram/send", "desc": "Enviar notificación Telegram", "body": "config_id, message"}, - {"method": "GET", "path": "/hermes/telegram/logs", "desc": "Logs de envíos"}, + {"method": "GET", "path": "/api/v2/telegram", "desc": "Listar configs de Telegram"}, + {"method": "POST", "path": "/api/v2/telegram", "desc": "Crear config"}, + {"method": "PUT", "path": "/api/v2/telegram/:id", "desc": "Actualizar config"}, + {"method": "DELETE", "path": "/api/v2/telegram/:id", "desc": "Eliminar config"}, + {"method": "POST", "path": "/api/v2/telegram/:id/test", "desc": "Enviar test"}, + {"method": "POST", "path": "/api/v2/telegram/send", "desc": "Enviar notificación Telegram", "body": "config_id, message"}, + {"method": "GET", "path": "/api/v2/telegram/logs", "desc": "Logs de envíos"}, }, }, { "nombre": "Notificaciones config", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/notif-config", "desc": "Configs de notificaciones por evento"}, - {"method": "POST", "path": "/hermes/notif-config", "desc": "Guardar config"}, - {"method": "GET", "path": "/hermes/servidor-alerta-config", "desc": "Umbrales de alerta de servidores"}, - {"method": "POST", "path": "/hermes/servidor-alerta-config", "desc": "Guardar umbrales"}, + {"method": "GET", "path": "/api/v2/notif-config", "desc": "Configs de notificaciones por evento"}, + {"method": "POST", "path": "/api/v2/notif-config", "desc": "Guardar config"}, + {"method": "GET", "path": "/api/v2/servidor-alerta-config", "desc": "Umbrales de alerta de servidores"}, + {"method": "POST", "path": "/api/v2/servidor-alerta-config", "desc": "Guardar umbrales"}, }, }, { "nombre": "Partner Recursos y Comunicados", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/partner-recursos", "desc": "Listar recursos partner"}, - {"method": "POST", "path": "/hermes/partner-recursos", "desc": "Crear recurso"}, - {"method": "PUT", "path": "/hermes/partner-recursos/:id", "desc": "Actualizar recurso"}, - {"method": "DELETE", "path": "/hermes/partner-recursos/:id", "desc": "Eliminar recurso"}, - {"method": "GET", "path": "/hermes/partner-comunicados", "desc": "Listar comunicados"}, - {"method": "POST", "path": "/hermes/partner-comunicados", "desc": "Crear comunicado"}, - {"method": "PUT", "path": "/hermes/partner-comunicados/:id", "desc": "Actualizar comunicado"}, - {"method": "DELETE", "path": "/hermes/partner-comunicados/:id", "desc": "Eliminar comunicado"}, + {"method": "GET", "path": "/api/v2/partner-recursos", "desc": "Listar recursos partner"}, + {"method": "POST", "path": "/api/v2/partner-recursos", "desc": "Crear recurso"}, + {"method": "PUT", "path": "/api/v2/partner-recursos/:id", "desc": "Actualizar recurso"}, + {"method": "DELETE", "path": "/api/v2/partner-recursos/:id", "desc": "Eliminar recurso"}, + {"method": "GET", "path": "/api/v2/partner-comunicados", "desc": "Listar comunicados"}, + {"method": "POST", "path": "/api/v2/partner-comunicados", "desc": "Crear comunicado"}, + {"method": "PUT", "path": "/api/v2/partner-comunicados/:id", "desc": "Actualizar comunicado"}, + {"method": "DELETE", "path": "/api/v2/partner-comunicados/:id", "desc": "Eliminar comunicado"}, }, }, { "nombre": "USITE Shield", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/shield", "desc": "Ver config Shield"}, - {"method": "POST", "path": "/hermes/shield", "desc": "Guardar config"}, - {"method": "GET", "path": "/hermes/shield/health", "desc": "Health check"}, - {"method": "GET", "path": "/hermes/shield/logs", "desc": "Logs de Shield"}, - {"method": "GET", "path": "/hermes/shield/logs/stats", "desc": "Estadísticas de logs"}, - {"method": "GET", "path": "/hermes/shield/review-requests", "desc": "Solicitudes de revisión"}, - {"method": "PUT", "path": "/hermes/shield/review-requests/:id/approve", "desc": "Aprobar solicitud"}, - {"method": "PUT", "path": "/hermes/shield/review-requests/:id/reject", "desc": "Rechazar solicitud"}, - {"method": "GET", "path": "/hermes/shield/whitelist", "desc": "Whitelist"}, - {"method": "POST", "path": "/hermes/shield/whitelist", "desc": "Agregar a whitelist"}, - {"method": "DELETE", "path": "/hermes/shield/whitelist/:domain", "desc": "Quitar de whitelist"}, - {"method": "GET", "path": "/hermes/shield/blacklist", "desc": "Blacklist"}, - {"method": "POST", "path": "/hermes/shield/blacklist", "desc": "Agregar a blacklist"}, - {"method": "DELETE", "path": "/hermes/shield/blacklist/:domain", "desc": "Quitar de blacklist"}, + {"method": "GET", "path": "/api/v2/shield", "desc": "Ver config Shield"}, + {"method": "POST", "path": "/api/v2/shield", "desc": "Guardar config"}, + {"method": "GET", "path": "/api/v2/shield/health", "desc": "Health check"}, + {"method": "GET", "path": "/api/v2/shield/logs", "desc": "Logs de Shield"}, + {"method": "GET", "path": "/api/v2/shield/logs/stats", "desc": "Estadísticas de logs"}, + {"method": "GET", "path": "/api/v2/shield/review-requests", "desc": "Solicitudes de revisión"}, + {"method": "PUT", "path": "/api/v2/shield/review-requests/:id/approve", "desc": "Aprobar solicitud"}, + {"method": "PUT", "path": "/api/v2/shield/review-requests/:id/reject", "desc": "Rechazar solicitud"}, + {"method": "GET", "path": "/api/v2/shield/whitelist", "desc": "Whitelist"}, + {"method": "POST", "path": "/api/v2/shield/whitelist", "desc": "Agregar a whitelist"}, + {"method": "DELETE", "path": "/api/v2/shield/whitelist/:domain", "desc": "Quitar de whitelist"}, + {"method": "GET", "path": "/api/v2/shield/blacklist", "desc": "Blacklist"}, + {"method": "POST", "path": "/api/v2/shield/blacklist", "desc": "Agregar a blacklist"}, + {"method": "DELETE", "path": "/api/v2/shield/blacklist/:domain", "desc": "Quitar de blacklist"}, }, }, { "nombre": "WebSMS (LabsMobile)", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/websms/config", "desc": "Ver config WebSMS"}, - {"method": "POST", "path": "/hermes/websms/save", "desc": "Guardar config"}, - {"method": "POST", "path": "/hermes/websms/test", "desc": "Enviar SMS de prueba"}, - {"method": "GET", "path": "/hermes/websms/logs", "desc": "Logs de envíos"}, + {"method": "GET", "path": "/api/v2/websms/config", "desc": "Ver config WebSMS"}, + {"method": "POST", "path": "/api/v2/websms/save", "desc": "Guardar config"}, + {"method": "POST", "path": "/api/v2/websms/test", "desc": "Enviar SMS de prueba"}, + {"method": "GET", "path": "/api/v2/websms/logs", "desc": "Logs de envíos"}, }, }, { "nombre": "Pasarelas de pago", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/pasarelas/bold/config", "desc": "Config Bold"}, - {"method": "POST", "path": "/hermes/pasarelas/bold/save", "desc": "Guardar config Bold"}, - {"method": "GET", "path": "/hermes/pasarelas/bold/logs", "desc": "Logs de webhooks Bold"}, - {"method": "GET", "path": "/hermes/pasarelas/dlocal/config", "desc": "Config dLocal"}, - {"method": "POST", "path": "/hermes/pasarelas/dlocal/save", "desc": "Guardar config dLocal"}, - {"method": "GET", "path": "/hermes/pasarelas/dlocal/logs", "desc": "Logs de pagos dLocal"}, - {"method": "GET", "path": "/hermes/pasarelas/paypal/config", "desc": "Config PayPal"}, - {"method": "POST", "path": "/hermes/pasarelas/paypal/save", "desc": "Guardar config PayPal"}, + {"method": "GET", "path": "/api/v2/pasarelas/bold/config", "desc": "Config Bold"}, + {"method": "POST", "path": "/api/v2/pasarelas/bold/save", "desc": "Guardar config Bold"}, + {"method": "GET", "path": "/api/v2/pasarelas/bold/logs", "desc": "Logs de webhooks Bold"}, + {"method": "GET", "path": "/api/v2/pasarelas/dlocal/config", "desc": "Config dLocal"}, + {"method": "POST", "path": "/api/v2/pasarelas/dlocal/save", "desc": "Guardar config dLocal"}, + {"method": "GET", "path": "/api/v2/pasarelas/dlocal/logs", "desc": "Logs de pagos dLocal"}, + {"method": "GET", "path": "/api/v2/pasarelas/paypal/config", "desc": "Config PayPal"}, + {"method": "POST", "path": "/api/v2/pasarelas/paypal/save", "desc": "Guardar config PayPal"}, }, }, { "nombre": "Query Runner", "desc": "Ejecutar queries SQL directamente contra las conexiones DB configuradas.", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/query-runner/connections", "desc": "Listar conexiones disponibles"}, - {"method": "GET", "path": "/hermes/query-runner/databases", "desc": "Listar databases. Query: ?connection_id="}, - {"method": "GET", "path": "/hermes/query-runner/tables", "desc": "Listar tablas. Query: ?connection_id=&database="}, - {"method": "GET", "path": "/hermes/query-runner/test", "desc": "Probar conexión. Query: ?connection_id="}, - {"method": "POST", "path": "/hermes/query-runner/run", "desc": "Ejecutar query", "body": "connection_id, database, query"}, - {"method": "GET", "path": "/hermes/query-runner/history", "desc": "Historial de queries"}, - {"method": "GET", "path": "/hermes/query-runner/columns", "desc": "Columnas de tabla. Query: ?connection_id=&database=&table="}, + {"method": "GET", "path": "/api/v2/query-runner/connections", "desc": "Listar conexiones disponibles"}, + {"method": "GET", "path": "/api/v2/query-runner/databases", "desc": "Listar databases. Query: ?connection_id="}, + {"method": "GET", "path": "/api/v2/query-runner/tables", "desc": "Listar tablas. Query: ?connection_id=&database="}, + {"method": "GET", "path": "/api/v2/query-runner/test", "desc": "Probar conexión. Query: ?connection_id="}, + {"method": "POST", "path": "/api/v2/query-runner/run", "desc": "Ejecutar query", "body": "connection_id, database, query"}, + {"method": "GET", "path": "/api/v2/query-runner/history", "desc": "Historial de queries"}, + {"method": "GET", "path": "/api/v2/query-runner/columns", "desc": "Columnas de tabla. Query: ?connection_id=&database=&table="}, }, }, { "nombre": "Hostinger", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/hostinger/vps", "desc": "Listar VPS Hostinger"}, - {"method": "GET", "path": "/hermes/hostinger/domains", "desc": "Listar dominios"}, - {"method": "GET", "path": "/hermes/hostinger/dns/:domain", "desc": "Registros DNS de un dominio"}, - {"method": "GET", "path": "/hermes/hostinger/orders", "desc": "Listar órdenes"}, - {"method": "GET", "path": "/hermes/hostinger/hosting", "desc": "Listar hosting"}, + {"method": "GET", "path": "/api/v2/hostinger/vps", "desc": "Listar VPS Hostinger"}, + {"method": "GET", "path": "/api/v2/hostinger/domains", "desc": "Listar dominios"}, + {"method": "GET", "path": "/api/v2/hostinger/dns/:domain", "desc": "Registros DNS de un dominio"}, + {"method": "GET", "path": "/api/v2/hostinger/orders", "desc": "Listar órdenes"}, + {"method": "GET", "path": "/api/v2/hostinger/hosting", "desc": "Listar hosting"}, }, }, { "nombre": "Cloudflare", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/cloudflare/zones", "desc": "Listar zonas"}, - {"method": "GET", "path": "/hermes/cloudflare/zones/:zone_id/dns", "desc": "Registros DNS de una zona"}, - {"method": "POST", "path": "/hermes/cloudflare/zones/:zone_id/dns", "desc": "Crear registro DNS"}, - {"method": "PUT", "path": "/hermes/cloudflare/zones/:zone_id/dns/:record_id", "desc": "Actualizar registro DNS"}, - {"method": "DELETE", "path": "/hermes/cloudflare/zones/:zone_id/dns/:record_id", "desc": "Eliminar registro DNS"}, + {"method": "GET", "path": "/api/v2/cloudflare/zones", "desc": "Listar zonas"}, + {"method": "GET", "path": "/api/v2/cloudflare/zones/:zone_id/dns", "desc": "Registros DNS de una zona"}, + {"method": "POST", "path": "/api/v2/cloudflare/zones/:zone_id/dns", "desc": "Crear registro DNS"}, + {"method": "PUT", "path": "/api/v2/cloudflare/zones/:zone_id/dns/:record_id", "desc": "Actualizar registro DNS"}, + {"method": "DELETE", "path": "/api/v2/cloudflare/zones/:zone_id/dns/:record_id", "desc": "Eliminar registro DNS"}, }, }, { "nombre": "Coolify", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/coolify/apps", "desc": "Listar aplicaciones"}, - {"method": "GET", "path": "/hermes/coolify/apps/:uuid", "desc": "Detalle aplicación"}, - {"method": "GET", "path": "/hermes/coolify/apps/:uuid/start", "desc": "Iniciar app"}, - {"method": "GET", "path": "/hermes/coolify/apps/:uuid/stop", "desc": "Detener app"}, - {"method": "GET", "path": "/hermes/coolify/apps/:uuid/restart", "desc": "Reiniciar app"}, - {"method": "POST", "path": "/hermes/coolify/apps/:uuid/deploy", "desc": "Desplegar app"}, - {"method": "GET", "path": "/hermes/coolify/servers", "desc": "Listar servidores Coolify"}, - {"method": "GET", "path": "/hermes/coolify/servers/:uuid", "desc": "Detalle servidor"}, - {"method": "GET", "path": "/hermes/coolify/servers/:uuid/resources", "desc": "Recursos del servidor"}, - {"method": "GET", "path": "/hermes/coolify/services", "desc": "Listar servicios"}, - {"method": "GET", "path": "/hermes/coolify/databases", "desc": "Listar databases"}, - {"method": "GET", "path": "/hermes/coolify/projects", "desc": "Listar proyectos Coolify"}, - {"method": "GET", "path": "/hermes/coolify/deployments", "desc": "Listar deployments"}, + {"method": "GET", "path": "/api/v2/coolify/apps", "desc": "Listar aplicaciones"}, + {"method": "GET", "path": "/api/v2/coolify/apps/:uuid", "desc": "Detalle aplicación"}, + {"method": "GET", "path": "/api/v2/coolify/apps/:uuid/start", "desc": "Iniciar app"}, + {"method": "GET", "path": "/api/v2/coolify/apps/:uuid/stop", "desc": "Detener app"}, + {"method": "GET", "path": "/api/v2/coolify/apps/:uuid/restart", "desc": "Reiniciar app"}, + {"method": "POST", "path": "/api/v2/coolify/apps/:uuid/deploy", "desc": "Desplegar app"}, + {"method": "GET", "path": "/api/v2/coolify/servers", "desc": "Listar servidores Coolify"}, + {"method": "GET", "path": "/api/v2/coolify/servers/:uuid", "desc": "Detalle servidor"}, + {"method": "GET", "path": "/api/v2/coolify/servers/:uuid/resources", "desc": "Recursos del servidor"}, + {"method": "GET", "path": "/api/v2/coolify/services", "desc": "Listar servicios"}, + {"method": "GET", "path": "/api/v2/coolify/databases", "desc": "Listar databases"}, + {"method": "GET", "path": "/api/v2/coolify/projects", "desc": "Listar proyectos Coolify"}, + {"method": "GET", "path": "/api/v2/coolify/deployments", "desc": "Listar deployments"}, }, }, { "nombre": "VCard API", "endpoints": []fiber.Map{ - {"method": "GET", "path": "/hermes/vcard-api/config", "desc": "Ver config VCard API"}, - {"method": "GET", "path": "/hermes/vcard-api/usuarios", "desc": "Listar usuarios VCard"}, - {"method": "GET", "path": "/hermes/vcard-api/usuarios/:id", "desc": "Detalle usuario"}, - {"method": "GET", "path": "/hermes/vcard-api/vcards", "desc": "Listar vcards"}, - {"method": "GET", "path": "/hermes/vcard-api/planes", "desc": "Listar planes"}, - {"method": "GET", "path": "/hermes/vcard-api/pagos", "desc": "Listar pagos"}, - {"method": "GET", "path": "/hermes/vcard-api/miniwebs", "desc": "Listar miniwebs"}, + {"method": "GET", "path": "/api/v2/vcard-api/config", "desc": "Ver config VCard API"}, + {"method": "GET", "path": "/api/v2/vcard-api/usuarios", "desc": "Listar usuarios VCard"}, + {"method": "GET", "path": "/api/v2/vcard-api/usuarios/:id", "desc": "Detalle usuario"}, + {"method": "GET", "path": "/api/v2/vcard-api/vcards", "desc": "Listar vcards"}, + {"method": "GET", "path": "/api/v2/vcard-api/planes", "desc": "Listar planes"}, + {"method": "GET", "path": "/api/v2/vcard-api/pagos", "desc": "Listar pagos"}, + {"method": "GET", "path": "/api/v2/vcard-api/miniwebs", "desc": "Listar miniwebs"}, }, }, }, diff --git a/rest/middlewares/auth.go b/rest/middlewares/auth.go index 7eb7150..500eae9 100755 --- a/rest/middlewares/auth.go +++ b/rest/middlewares/auth.go @@ -262,8 +262,8 @@ func AuthAdmin(c *fiber.Ctx) error { func AuthApi() func(*fiber.Ctx) error { return func(c *fiber.Ctx) error { - // Excluir rutas públicas - if c.Path() == "/api/v1/oauth/token" || c.Path() == "/api/sms/send" { + // Excluir rutas públicas y /api/v2 (tiene su propio middleware) + if c.Path() == "/api/v1/oauth/token" || c.Path() == "/api/sms/send" || strings.HasPrefix(c.Path(), "/api/v2") { return c.Next() } diff --git a/rest/middlewares/hermes_auth.go b/rest/middlewares/hermes_auth.go index de6aa31..e1c3048 100644 --- a/rest/middlewares/hermes_auth.go +++ b/rest/middlewares/hermes_auth.go @@ -7,11 +7,11 @@ import ( "github.com/gofiber/fiber/v2" ) -func HermesAuth() fiber.Handler { +func AdminApiAuth() fiber.Handler { return func(c *fiber.Ctx) error { - apiKey := os.Getenv("HERMES_API_KEY") + apiKey := os.Getenv("ADMIN_API_KEY") if apiKey == "" { - return c.Status(503).JSON(fiber.Map{"error": "HERMES_API_KEY not configured"}) + return c.Status(503).JSON(fiber.Map{"error": "ADMIN_API_KEY not configured"}) } token := "" diff --git a/rest/routes/hermes.go b/rest/routes/hermes.go index 2af75ae..fb5d67b 100644 --- a/rest/routes/hermes.go +++ b/rest/routes/hermes.go @@ -6,11 +6,11 @@ import ( "github.com/sujit-baniya/fiber-boilerplate/rest/middlewares" ) -func HermesRoutes(app *fiber.App) { - h := app.Group("/hermes", middlewares.HermesAuth()) +func AdminApiRoutes(api fiber.Router) { + h := api.Group("v2", middlewares.AdminApiAuth()) // ─── Spec (documentación completa de la API) ───────────────────────────── - h.Get("/spec", controllers.HermesSpec) + h.Get("/spec", controllers.AdminApiSpec) // ─── Usuarios ──────────────────────────────────────────────────────────── h.Get("/users", controllers.GetUsers) diff --git a/rest/routes/routes.go b/rest/routes/routes.go index 330335b..c01e963 100755 --- a/rest/routes/routes.go +++ b/rest/routes/routes.go @@ -9,9 +9,7 @@ func LoadRoutes(app *fiber.App) { // Grupo de rutas de la API con autenticación api := app.Group("/api").Use(middlewares.AuthApi()) ApiRoutes(api) - - // API Hermes (acceso externo con API Key) - HermesRoutes(app) + AdminApiRoutes(api) // Grupo de rutas web (sin autenticación) web := app.Group("")