From 13c3b4c16ca2fd7353bded36e0dbd826e18206b0 Mon Sep 17 00:00:00 2001 From: Lizandro GD Date: Mon, 13 Jul 2026 03:01:15 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20endpoint=20/hermes/spec=20con=20documen?= =?UTF-8?q?taci=C3=B3n=20completa=20de=20la=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5 --- rest/controllers/hermes_spec_controller.go | 500 +++++++++++++++++++++ rest/routes/hermes.go | 3 + 2 files changed, 503 insertions(+) create mode 100644 rest/controllers/hermes_spec_controller.go diff --git a/rest/controllers/hermes_spec_controller.go b/rest/controllers/hermes_spec_controller.go new file mode 100644 index 0000000..5446058 --- /dev/null +++ b/rest/controllers/hermes_spec_controller.go @@ -0,0 +1,500 @@ +package controllers + +import "github.com/gofiber/fiber/v2" + +func HermesSpec(c *fiber.Ctx) error { + spec := fiber.Map{ + "api": "Hermes API — U-Site Admin", + "version": "1.0", + "base": "/hermes", + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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="}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + { + "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"}, + }, + }, + }, + } + return c.JSON(spec) +} diff --git a/rest/routes/hermes.go b/rest/routes/hermes.go index 37d3e7f..2af75ae 100644 --- a/rest/routes/hermes.go +++ b/rest/routes/hermes.go @@ -9,6 +9,9 @@ import ( func HermesRoutes(app *fiber.App) { h := app.Group("/hermes", middlewares.HermesAuth()) + // ─── Spec (documentación completa de la API) ───────────────────────────── + h.Get("/spec", controllers.HermesSpec) + // ─── Usuarios ──────────────────────────────────────────────────────────── h.Get("/users", controllers.GetUsers) h.Get("/users/:id", controllers.GetUser)