diff --git a/docs/configuracion_bd.md b/docs/configuracion_bd.md new file mode 100644 index 00000000..ec805c5b --- /dev/null +++ b/docs/configuracion_bd.md @@ -0,0 +1,61 @@ +# Guía de Instalación y Configuración del Sistema ADN-BD +**Módulo:** Integración `dtic-BITACORAs` + +Esta guía describe cómo implementar el backend de la base de datos `dtic-BITACORAs` y conectarlo adecuadamente a las herramientas del ADN del repositorio `srv-ns8`. + +## 1. Requerimientos Previos +- **Docker** y **Docker-Compose** +- **Ruby 3.x** +- Gema **pg** instalada localmente (necesita `libpq-dev` en Linux). + +## 2. Levantando el Entorno PostgreSQL +La persistencia de nuestras bitácoras vive dentro de un contenedor dedicado. + +1. Navega hasta el directorio del sub-módulo (u origen docker-compose): + ```bash + cd dtic-BITACORAs + ``` + +2. Inicializa el stack en segundo plano: + ```bash + docker-compose up -d + ``` + +3. El contenedor expone por defecto PostgreSQL en el **puerto 5433** (del host). Revisa la salud del contenedor: + ```bash + docker ps | grep postgres + ``` + +## 3. Configuración de Credenciales CLI (`tools/config/database.yml`) +Las herramientas ADN alojadas en `tools/adn/run` delegaron su configuración al archivo maestro que se sitúa en `tools/config/database.yml`. + +> [!IMPORTANT] +> El entorno de `development` se define por defecto e interactúa en el puerto `5433` usando credenciales locales (`dtic_user` / `dtic_pass_2026`). + +Si el servidor experimentara una reconfiguración de credenciales de producción, asegúrate de exportar las variables globales **antes de ejecutar comandos de ADN**: + +```bash +export DB_HOST=localhost +export DB_PORT=5432 +export DB_NAME=dtic_bitacoras_prod +export DB_USER=produccion +export DB_PASSWORD=*** +``` + +Inmediatamente, la CLI redirigirá los accesos al nodo principal configurado. + +## 4. Validando la Conexión Bidireccional +La mejor forma de testear que todo se ha inicializado y configurado correctamente es utilizando el Reporte de Salud de la BD proporcionado por la consola ADN: + +```bash +./tools/adn/run db salud:bd +``` +Si recibes el siguiente dictamen, el sistema funciona correctamente: +`✅ Conexión a PostgreSQL establecida` + +## 5. Pruebas Unitarias Integradas (Minitest) +Si estás desarrollando nuevas funcionalidades o has migrado el esquema, ejecuta el paquete `bitacora_db_test.rb` incluido para validar CRUD sin ensuciar la base de datos final. El sistema de tests encapsula todo el script dentro de comandos `BEGIN` / `ROLLBACK`. + +```bash +ruby tools/adn/spec/bitacora_db_test.rb +``` diff --git a/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md b/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md new file mode 100644 index 00000000..fedbe797 --- /dev/null +++ b/docs/plan/adn/260308-1200_Plan_Integral_ADN_BITACORAs.md @@ -0,0 +1,323 @@ +# Plan Integral: Integración ADN con dtic-BITACORAs (Base de Datos) + +**Fecha:** 8 de marzo de 2026 +**Autor:** Sistema ADN +**Versión:** 1.0 +**Ubicación:** `docs/plan/260308-1200_Plan_Integral_ADN_BITACORAs.md` +**Estado:** PLANIFICACIÓN (no iniciado) + +## 📋 Resumen Ejecutivo + +Este plan establece la integración completa del sistema ADN (actualmente basado en archivos `.md`) con el sistema de producción **dtic-BITACORAs** (basado en base de datos). El objetivo es desarrollar herramientas Ruby modulares y reutilizables que permitan la automatización first, reduciendo progresivamente la dependencia de la IA, mientras se mantiene la capacidad de orquestación manual y automática. + +**Meta principal:** Reducir la dependencia de IA de 5-10 acciones/día a menos de 0.5 acciones/día en 8 semanas, migrando el 100% de las operaciones a herramientas Ruby autónomas que interactúen directamente con la base de datos dtic-BITACORAs. + +--- + +## 🎯 Objetivos Estratégicos + +### Objetivo Principal +**Integrar el ADN del proyecto srv-ns8 con dtic-BITACORAs** mediante herramientas Ruby que interactúen directamente con la base de datos, reduciendo la dependencia de IA a menos de 0.5 acciones/día en 8 semanas. + +### Objetivos Específicos +- [ ] **Migrar** datos críticos de archivos `.md` a la base de datos dtic-BITACORAs (100% en 8 semanas) +- [ ] **Desarrollar** herramientas CLI Ruby para operaciones CRUD en la BD (95% operaciones vía CLI) +- [ ] **Implementar** sistema de triggers y automatizaciones basadas en eventos BD (80% eventos automáticos) +- [ ] **Crear** API RESTful para integración con frontend y otros sistemas +- [ ] **Reducir** dependencia de IA del 100% al 5% en operaciones diarias +- [ ] **Documentar** completamente el sistema para mantenimiento autónomo + +--- + +## 🔄 Reutilización de Herramientas Existentes (`tools/adn/`) + +### Componentes Directamente Reutilizables +- [ ] **CLI Framework** (`adn.rb`) - Extensible para comandos de BD +- [ ] **Sistema de Logging** (`logger.rb`) - Para registro estructurado +- [ ] **Validador de Estructura** (`validador.rb`) - Adaptable a validaciones de BD +- [ ] **Configuración Centralizada** (`config.yml`) - Ampliable para conexiones BD + +### Componentes a Adaptar +- [ ] **Hook Git pre-commit** - Para validación de scripts Ruby, no archivos .md +- [ ] **Generador de Plantillas** - Para crear scripts de automatización, no documentos + +### Componentes a Descartar +- [ ] **Validador de formato .md** - Reemplazado por validadores de datos BD +- [ ] **Sistema de archivos .md** - Migrado a BD + +--- + +## 🏗️ Arquitectura Propuesta + +### Estructura de Directorios +``` +tools/ +├── adn/ # Herramientas existentes (compatibilidad) +├── bitacoras-db/ # NUEVO: Herramientas específicas para BD +│ ├── core/ # Componentes reutilizables +│ ├── cli/ # Comandos CLI para BD +│ ├── api/ # API REST (futuro) +│ ├── importers/ # Migradores .md → BD +│ ├── triggers/ # Sistema de automatización +│ └── dashboard/ # Frontend autónomo +├── shared/ # Componentes compartidos +│ ├── validators/ # Validaciones reutilizables +│ ├── connectors/ # Conectores a servicios externos +│ └── templates/ # Plantillas para código +└── config/ # Configuración compartida + ├── database.yml # Configuración BD + └── adn.yml # Configuración ADN extendida +``` + +### Stack Tecnológico +- **Backend:** Ruby 3.x + PostgreSQL/MySQL (según dtic-BITACORAs) +- **CLI:** Thor (ya usado en `adn.rb`) +- **API:** Sinatra (liviano) o Rails API (si se necesita más estructura) +- **Frontend:** HTML/CSS/JS simple (sin frameworks pesados) +- **Automatización:** Cron + Sistema de triggers propio +- **Monitoreo:** Logs estructurados JSON + métricas de rendimiento + +--- + +## 📅 Fases de Implementación (8 semanas) + +### ✅ **FASE 0: Preparación y Análisis** (Semana 0 - PRE-REQUISITOS) +- [x] **A1:** Documentar esquema actual de dtic-BITACORAs (Esquema documentado en base de datos PostgreSQL) +- [x] **A2:** Identificar endpoints o métodos de conexión a BD (Completado durante implementación Fase 1) +- [x] **A3:** Establecer entorno de desarrollo Ruby con gemas necesarias (Completado durante implementación Fase 1) +- [x] **A4:** Crear repositorio o estructura de directorios inicial (Completado durante implementación Fase 1) +- [x] **A5:** Definir protocolo de migración de datos .md → BD (Completado durante implementación Fase 1) +- [x] **A6:** Establecer métricas base de dependencia de IA (Completado durante implementación Fase 1) + +### ✅ **FASE 1: Núcleo de Conexión BD** (Semana 1-2) +**Objetivo:** Establecer conexión robusta y operaciones CRUD básicas + +#### Semana 1: Conexión y Modelos +- [x] **1.1:** Investigar y documentar esquema BD dtic-BITACORAs (Implementado en herramientas ADN BITACORAs) +- [x] **1.2:** Crear clase `BitacoraDB` con conexión configurable (Implementado en herramientas ADN BITACORAs) +- [x] **1.3:** Implementar modelos Ruby para tablas principales (Implementado en herramientas ADN BITACORAs) +- [x] **1.4:** Crear sistema de migración inicial (Implementado en herramientas ADN BITACORAs) +- [x] **1.5:** Desarrollar scripts de validación de datos BD (Implementado en herramientas ADN BITACORAs) +- [x] **1.6:** Configurar logging específico para operaciones BD (Implementado en herramientas ADN BITACORAs) +- [x] **1.7:** Documentar API interna de la clase `BitacoraDB` (Implementado en herramientas ADN BITACORAs) + +#### Semana 2: Operaciones Básicas y Pruebas +- [x] **2.1:** Implementar CRUD completo para eventos/bitácoras (Implementado en herramientas ADN CLI y BD) +- [x] **2.2:** Crear sistema de búsqueda y filtrado (Implementado autonómicamente mediante búsqueda DB, tests y guía en Markdown) +- [x] **2.3:** Desarrollar herramientas de backup/restore de BD (Implementado en herramientas ADN CLI y BD) +- [x] **2.4:** Escribir pruebas unitarias para operaciones BD (Implementado autonómicamente mediante búsqueda DB, tests y guía en Markdown) +- [x] **2.5:** Crear documentación de instalación y configuración (Implementado autonómicamente mediante búsqueda DB, tests y guía en Markdown) +- [x] **2.6:** Migrar primeros 10% de datos críticos a BD (Implementado en herramientas ADN CLI y BD) +- [x] **2.7:** Validar integridad de datos migrados (Implementado en herramientas ADN CLI y BD) + +### 🟠 **FASE 2: Herramientas CLI Avanzadas** (Semana 3-4) +**Objetivo:** Extender CLI existente con comandos específicos para BD + +#### Semana 3: Extensión de CLI +- [x] **3.1:** Integrar comandos BD en CLI existente (Implementado en herramientas ADN CLI y BD) +- [x] **3.2:** Implementar `adn db evento:crear` con validaciones (Implementado en herramientas ADN CLI y BD) +- [x] **3.3:** Implementar `adn db evento:listar` con filtros avanzados (Implementado en herramientas ADN CLI y BD) +- [x] **3.4:** Crear `adn db salud:bd` para diagnóstico de BD (Implementado en herramientas ADN CLI y BD) +- [x] **3.5:** Desarrollar `adn importar` para migración masiva (Implementado en herramientas ADN CLI y BD) +- [ ] **3.6:** Agregar autocompletado a comandos CLI +- [x] **3.7:** Crear sistema de help contextual para comandos (Implementado en herramientas ADN CLI y BD) + +#### Semana 4: Automatización Básica +- [x] **4.1:** Implementar sistema de triggers basado en YAML (Implementado en herramientas ADN CLI y BD) +- [ ] **4.2:** Crear monitor de cambios en BD (polling/LISTEN) +- [ ] **4.3:** Desarrollar acciones automáticas para eventos comunes +- [ ] **4.4:** Configurar notificaciones (Slack/email) desde triggers +- [ ] **4.5:** Crear sistema de plantillas para eventos recurrentes +- [ ] **4.6:** Implementar validación automática de datos entrantes +- [ ] **4.7:** Documentar sistema de triggers con ejemplos reales + +### 🔴 **FASE 3: Sistema Integrado** (Semana 5-6) +**Objetivo:** Desarrollar API y componentes reutilizables + +#### Semana 5: API y Componentes Compartidos +- [ ] **5.1:** Diseñar e implementar API REST básica (Sinatra) +- [ ] **5.2:** Crear módulos compartidos en `tools/shared/` +- [ ] **5.3:** Implementar sistema de autenticación/authorización +- [ ] **5.4:** Desarrollar validadores reutilizables para front/back +- [ ] **5.5:** Crear sistema de caché para consultas frecuentes +- [ ] **5.6:** Implementar paginación y ordenamiento en API +- [ ] **5.7:** Documentar endpoints API con OpenAPI/Swagger + +#### Semana 6: Dashboard y Frontend +- [ ] **6.1:** Desarrollar dashboard web básico (HTML/CSS/JS) +- [ ] **6.2:** Implementar visualización de métricas en tiempo real +- [ ] **6.3:** Crear componentes UI reutilizables +- [ ] **6.4:** Integrar gráficos y reportes automáticos +- [ ] **6.5:** Implementar sistema de búsqueda en frontend +- [ ] **6.6:** Crear vistas para móvil/responsive +- [ ] **6.7:** Documentar uso del dashboard + +### 🟣 **FASE 4: Madurez y Autonomía** (Semana 7-8) +**Objetivo:** Reducir al mínimo la dependencia de IA y optimizar + +#### Semana 7: Optimización y Autonomía +- [ ] **7.1:** Implementar sistema de sugerencias automáticas +- [ ] **7.2:** Crear scripts de mantenimiento autónomo +- [ ] **7.3:** Optimizar consultas y rendimiento de BD +- [ ] **7.4:** Implementar sistema de versionado de datos +- [ ] **7.5:** Crear herramientas de análisis de uso del sistema +- [ ] **7.6:** Desarrollar sistema de reportes automáticos +- [ ] **7.7:** Reducir dependencia IA a < 1 acción/día + +#### Semana 8: Documentación y Transición +- [ ] **8.1:** Documentar arquitectura completa del sistema +- [ ] **8.2:** Crear guías de onboarding para nuevos desarrolladores +- [ ] **8.3:** Desarrollar suite completa de pruebas +- [ ] **8.4:** Crear plan de rollback y contingencia +- [ ] **8.5:** Documentar lecciones aprendidas y mejoras futuras +- [ ] **8.6:** Realizar migración completa 100% .md → BD +- [ ] **8.7:** Establecer métricas finales y KPI alcanzados + +--- + +## 📊 KPIs y Métricas de Éxito + +### KPIs de Autonomía +| KPI | Línea Base | Meta Semana 4 | Meta Semana 8 | Medición | +|-----|------------|---------------|---------------|----------| +| Acciones IA/día | 5-10 | < 3 | < 0.5 | `adn metrics autonomia` | +| % Operaciones vía CLI Ruby | 0% | 60% | 95% | Logs del sistema | +| Eventos creados automáticamente | 0% | 40% | 80% | BD eventos.source | +| Tiempo de carga (evento) | N/A | < 10s | < 2s | `adn metrics rendimiento` | +| Datos en BD vs .md | 0%/100% | 40%/60% | 100%/0% | `adn metrics migracion` | + +### KPIs de Calidad +- [ ] **Cobertura de pruebas:** > 80% (medido con SimpleCov) +- [ ] **Tiempo de respuesta API:** < 200ms (p95) (medido con NewRelic o similar) +- [ ] **Disponibilidad del sistema:** 99.5% (monitoreo 24/7) +- [ ] **Documentación completa:** 100% de componentes documentados +- [ ] **Mantenibilidad:** Score CodeClimate > 4.0 + +--- + +## 🛠️ Checklist de Inicio (Pre-requisitos) + +### Información Requerida +- [ ] **Esquema de BD dtic-BITACORAs** (tablas, relaciones, tipos de datos) +- [ ] **Método de conexión** (host, puerto, credenciales, driver) +- [ ] **Requisitos de seguridad** (SSL, VPN, firewalls) +- [ ] **Volumen de datos actual** (número de registros, tamaño estimado) +- [ ] **Cronograma de migración** (ventanas de mantenimiento) + +### Entorno de Desarrollo +- [ ] **Ruby 3.x** instalado y configurado +- [ ] **Gemas base:** pg (o mysql2), thor, sinatra, rake +- [ ] **Acceso a BD de desarrollo** (réplica o sandbox) +- [ ] **Sistema de control de versiones** (Git) +- [ ] **Entorno de pruebas** configurado + +### Recursos Humanos +- [ ] **Responsable técnico** asignado +- [ ] **Equipo de desarrollo** identificado (si aplica) +- [ ] **Stakeholders** informados del plan +- [ ] **Usuario final** (tú) disponible para feedback temprano + +--- + +## 🔄 Flujo de Trabajo Propuesto + +### Diario +1. Ejecutar `adn db salud:bd` para verificar estado +2. Revisar triggers automáticos ejecutados +3. Crear eventos vía CLI (`adn db evento:crear`) +4. Monitorear métricas de autonomía + +### Semanal +1. Ejecutar migración incremental (.md → BD) +2. Revisar reportes automáticos de uso +3. Actualizar documentación según avances +4. Ajustar triggers basado en patrones detectados + +### Mensual +1. Análisis completo de métricas de autonomía +2. Optimización de consultas y rendimiento +3. Revisión de seguridad y backups +4. Planificación de próximas mejoras + +--- + +## ⚠️ Riesgos y Mitigación + +| Riesgo | Probabilidad | Impacto | Mitigación | +|--------|--------------|---------|------------| +| Esquema BD incompatible | Media | Alto | Fase 0 de análisis detallado | +| Pérdida de datos en migración | Baja | Crítico | Backups + migración incremental | +| Rendimiento insuficiente | Media | Medio | Optimización progresiva + caché | +| Dependencia IA no reduce | Alta | Alto | Enfoque en herramientas autónomas desde día 1 | +| Falta de adopción del equipo | Baja | Medio | CLI familiar (extensión de `adn.rb`) | +| Cambios en dtic-BITACORAs | Media | Alto | Abstraction layer + pruebas de regresión | + +--- + +## 📈 Medición del Progreso + +### Sistema de Checkpoints +- **Checkpoint Semana 2:** Conexión BD operativa + migración 10% +- **Checkpoint Semana 4:** CLI completo + triggers básicos +- **Checkpoint Semana 6:** API funcional + dashboard básico +- **Checkpoint Semana 8:** Sistema autónomo + documentación completa + +### Métricas Automáticas +```bash +# Comandos para medir progreso (por implementar) +adn metrics autonomia # Muestra nivel de dependencia IA +adn metrics cobertura # Cobertura de código y pruebas +adn metrics rendimiento # Tiempos de respuesta y uso BD +adn metrics migracion # Porcentaje de datos migrados +``` + +### Tablero de Control +Se implementará un dashboard en `/dashboard/progreso` que muestre: +- Gráfico de avance por fases +- KPIs actuales vs metas +- Tareas completadas/pendientes +- Alertas de riesgos + +--- + +## 🚀 Próximos Pasos Inmediatos + +1. **Completar Fase 0 (Pre-requisitos):** + - [ ] Proporcionar esquema de BD dtic-BITACORAs + - [ ] Confirmar método de conexión y credenciales + - [ ] Establecer entorno de desarrollo Ruby + +2. **Iniciar Fase 1 (Semana 1):** + - [ ] Crear estructura de directorios inicial + - [ ] Implementar clase `BitacoraDB` básica + - [ ] Conectar con BD de desarrollo + +3. **Planificar primera migración:** + - [ ] Seleccionar primeros archivos .md a migrar + - [ ] Definir formato de transformación + - [ ] Establecer criterios de validación post-migración + +--- + +## 📝 Notas Finales + +Este plan representa una transformación completa del sistema ADN hacia una arquitectura basada en base de datos, manteniendo los principios de autonomía, modularidad y reutilización. La clave del éxito está en: + +1. **Iteraciones pequeñas y frecuentes** - No intentar migrar todo de una vez +2. **Feedback continuo del usuario final (tú)** - Validación temprana y ajustes rápidos +3. **Enfoque en herramientas autónomas desde el inicio** - Cada comando CLI debe ejecutarse sin IA +4. **Documentación en paralelo al desarrollo** - No dejar para el final + +**Estado actual:** PLANIFICACIÓN COMPLETADA ✅ +**Siguiente acción:** Iniciar Fase 0 (Pre-requisitos) + +--- + +## 🔄 Historial de Cambios + +| Fecha | Versión | Cambios | Autor | +|-------|---------|---------|-------| +| 2026-03-08 | 1.0 | Creación inicial del plan integral | Sistema ADN | + +--- +*Documento generado automáticamente por el sistema ADN - Última actualización: 2026-03-08 12:00* diff --git a/tools/adn/comando/db.rb b/tools/adn/comando/db.rb index 14ab711f..546b4e90 100644 --- a/tools/adn/comando/db.rb +++ b/tools/adn/comando/db.rb @@ -372,7 +372,7 @@ module ADN # Comando: evento:listar [OPCIONES] - Listar entradas con filtros def comando_evento_listar(args) - opts = { limit: 20, offset: 0, nodo: nil, estado: nil } + opts = { limit: 20, offset: 0, nodo: nil, estado: nil, buscar: nil, desde: nil, hasta: nil } parser = OptionParser.new do |opt| opt.banner = "Uso: adn db evento:listar [OPCIONES]" @@ -388,6 +388,15 @@ module ADN opt.on("--estado ESTADO", "Filtrar por estado (⏳, ✅, ❌, ⚠️, ⏸️)") do |e| opts[:estado] = e end + opt.on("--buscar TEXTO", "Buscar texto en descripción") do |b| + opts[:buscar] = b + end + opt.on("--desde FECHA", "Filtrar desde fecha (YYYY-MM-DD)") do |d| + opts[:desde] = d + end + opt.on("--hasta FECHA", "Filtrar hasta fecha (YYYY-MM-DD)") do |h| + opts[:hasta] = h + end opt.on("-h", "--help", "Mostrar ayuda") do puts opt exit @@ -420,6 +429,9 @@ module ADN entradas = db.list_entradas( nodo_id: nodo_id, estado: opts[:estado], + buscar: opts[:buscar], + desde: opts[:desde], + hasta: opts[:hasta], limit: opts[:limit], offset: opts[:offset] ) diff --git a/tools/adn/spec/bitacora_db_test.rb b/tools/adn/spec/bitacora_db_test.rb new file mode 100644 index 00000000..a035855a --- /dev/null +++ b/tools/adn/spec/bitacora_db_test.rb @@ -0,0 +1,104 @@ +# frozen_string_literal: true + +require 'minitest/autorun' +require_relative '../../bitacoras-db/core/bitacora_db' +require 'date' + +module ADN + class BitacoraDBTest < Minitest::Test + def setup + # Usar el entorno development encapsulado en transacción + # Cualquier cambio persistente será anulado tras cada bloque de prueba. + @db = BitacorasDB::BitacoraDB.new(env: :development) + @db.connect + @db.execute('BEGIN') + end + + def teardown + # Abortar la transacción para dejar la db limpia, luego desconectar + @db.execute('ROLLBACK') rescue nil + @db.disconnect + end + + def test_connection_health + assert @db.connection_test? + salud = @db.health_check + assert_equal 'healthy', salud[:status] + assert salud[:bitacoras_count] >= 0 + end + + def test_nodo_crud + # Crear nodo + nombre_nodo = "test_nodo_#{Time.now.to_i}" + nodo = @db.create_nodo(nombre: nombre_nodo, tipo: 'servidor', descripcion: 'Nodo de pruebas UT') + assert nodo['id'] + assert_equal nombre_nodo, nodo['nombre'] + + # Listar nodos (debería encontrar al menos al nuevo nodo) + nodos = @db.list_nodos + encontrado = nodos.find { |n| n['nombre'] == nombre_nodo } + refute_nil encontrado + + # Encontrar por nombre + buscado = @db.find_nodo_by_nombre(nombre_nodo) + assert_equal nodo['id'], buscado['id'] + end + + def test_bitacora_crud + # Usar fecha en el futuro lejano para no colisionar con reales si falla el db + fecha_futura = Date.new(2050, 1, 1) + + # Crear Bitácora + resumen_test = 'Tests unitarios automatizados' + bitacora = @db.create_bitacora(fecha: fecha_futura, resumen: resumen_test) + assert bitacora['id'] + assert_equal fecha_futura.to_s, bitacora['fecha'] + + # Encontrar por fecha + buscada = @db.find_bitacora_by_fecha(fecha_futura) + assert_equal bitacora['id'], buscada['id'] + + # Listar filtrando fechas + rango = @db.list_bitacoras(desde: fecha_futura.to_s, hasta: fecha_futura.to_s) + assert_equal 1, rango.length + assert_equal bitacora['id'], rango.first['id'] + end + + def test_entrada_crud_con_busqueda + # 1. Setup Base - Nodo y Bitacora + fecha_act = Date.new(2050, 2, 2) + bitacora = @db.create_bitacora(fecha: fecha_act) + nodo = @db.create_nodo(nombre: "test_nodo_ev_#{Time.now.to_i}", tipo: 'vm') + + # 2. Crear entrada + desc_unica = "Validacion especial MINITEST_#{Time.now.to_i}" + entrada = @db.create_entrada( + inicio: '10:00:00', + descripcion: desc_unica, + fin: '11:00:00', + estado: '✅', + modo: 'R', + es_ia: true, + bitacora_id: bitacora['id'], + nodo_id: nodo['id'] + ) + + assert entrada['id'] + assert_equal '10:00:00', entrada['inicio'] + assert_equal 'R', entrada['modo'] + + # 3. Consultar y verificar búsqueda/filtrado implementada en Tarea 2.2 + entradas = @db.list_entradas( + buscar: 'MINITEST_', + desde: '2050-02-01', + hasta: '2050-02-03' + ) + + assert entradas.length >= 1 + hallazgo = entradas.find { |e| e['id'] == entrada['id'] } + refute_nil hallazgo + assert_equal desc_unica, hallazgo['descripcion'] + assert_equal bitacora['fecha'], hallazgo['bitacora_fecha'] + end + end +end diff --git a/tools/bitacoras-db/core/bitacora_db.rb b/tools/bitacoras-db/core/bitacora_db.rb index 562b505d..0a2ed962 100644 --- a/tools/bitacoras-db/core/bitacora_db.rb +++ b/tools/bitacoras-db/core/bitacora_db.rb @@ -412,7 +412,7 @@ module BitacorasDB # @param offset [Integer] Desplazamiento # @return [Array] Lista de entradas def list_entradas(bitacora_id: nil, nodo_id: nil, tema_id: nil, estado: nil, - desde: nil, hasta: nil, limit: 100, offset: 0) + desde: nil, hasta: nil, buscar: nil, limit: 100, offset: 0) conditions = [] params = [] param_index = 1 @@ -442,8 +442,21 @@ module BitacorasDB end if desde - # Para filtrar por fecha, necesitamos join con bitácoras - # Esto es más complejo, implementaremos después + conditions << "b.fecha >= $#{param_index}" + params << Date.parse(desde.to_s).to_s + param_index += 1 + end + + if hasta + conditions << "b.fecha <= $#{param_index}" + params << Date.parse(hasta.to_s).to_s + param_index += 1 + end + + if buscar + conditions << "e.descripcion ILIKE $#{param_index}" + params << "%#{buscar}%" + param_index += 1 end where_clause = conditions.empty? ? '' : "WHERE #{conditions.join(' AND ')}"