# frozen_string_literal: true # tools/bitacoras-db/cli/exportar_todo.rb # ========================================== # Exporta TODAS las bitácoras de la DB a archivos .md # Uso: ruby tools/bitacoras-db/cli/exportar_todo.rb [--dir DIRECTORIO] # — o vía enjambre — # ./tools/adn/run db exportar:md --todo require 'date' require 'optparse' require_relative '../core/bitacora_db' require_relative '../exporters/md_exporter' module BitacorasDB module CLI class ExportarTodo def initialize(bitacoras_dir, logger = nil) @bitacoras_dir = bitacoras_dir @logger = logger || default_logger @resultados = { ok: 0, error: 0 } end def ejecutar @logger.info("Exportando todas las bitácoras de DB a MD...") BitacorasDB::BitacoraDB.with_connection do |db| bitacoras = db.list_bitacoras(limit: 500) if bitacoras.empty? @logger.info("No hay bitácoras en la base de datos.") return end exporter = BitacorasDB::Exporters::MDExporter.new(db, @logger) bitacoras.each do |b| fecha = b['fecha'].to_s fecha = fecha.split('T').first if fecha.include?('T') archivo = File.join(@bitacoras_dir, "#{fecha}.md") if exporter.exportar_bitacora(fecha, archivo) @resultados[:ok] += 1 else @resultados[:error] += 1 end end end @logger.info("📊 Exportación masiva completada:") @logger.info(" ✅ Exitosas: #{@resultados[:ok]}") @logger.info(" ❌ Errores: #{@resultados[:error]}") if @resultados[:error] > 0 end private def default_logger Class.new do def info(msg); puts "[INFO] #{msg}"; end def error(msg); puts "[ERROR] #{msg}"; end def exito(msg); puts "[OK] #{msg}"; end end.new end end end end # Ejecución directa if __FILE__ == $0 bitacoras_dir = File.expand_path('../../../docs/bitacoras', __dir__) BitacorasDB::CLI::ExportarTodo.new(bitacoras_dir).ejecutar end