Feat(ADN): Implementado y ejecutado archivar:md para mover Markdowns obsoletos a histórico DB-First

This commit is contained in:
Ricardo Monla
2026-03-10 16:02:03 -03:00
parent 8aa1532396
commit 8d27a8958e
74 changed files with 3195 additions and 2073 deletions
+57
View File
@@ -86,6 +86,8 @@ module ADN
comando_estadisticas
when 'backup'
comando_backup(sub_args)
when 'archivar:md'
comando_archivar_md
else
@logger.error("Subcomando desconocido: #{subcomando}")
@@ -1007,6 +1009,60 @@ module ADN
# Comando: archivar:md - Mover bitácoras y proyectos MD importados/obsoletos a carpetas _hist
def comando_archivar_md
require 'fileutils'
puts "#{Color::CYAN}🧹 Iniciando limpieza y archivado de archivos Markdown...#{Color::RESET}"
BitacorasDB::BitacoraDB.with_connection do |db|
bitacoras_dir = defined?(ADN::BITACORAS_DIR) ? ADN::BITACORAS_DIR : File.expand_path('../../../docs/bitacoras', __dir__)
proyectos_dir = File.expand_path('../../../docs/proyectos', __dir__)
hist_bitacoras = File.join(bitacoras_dir, '_hist')
hist_proyectos = File.join(proyectos_dir, '_hist')
FileUtils.mkdir_p(hist_bitacoras)
FileUtils.mkdir_p(hist_proyectos)
# 1. Archivar Bitácoras Diarias
puts "\\n#{Color::BOLD}>> Verificando Bitácoras Diarias...#{Color::RESET}"
bitacoras_db = db.send(:execute, "SELECT fecha FROM bitacoras.bitacoras").map { |row| row['fecha'] }
Dir.glob(File.join(bitacoras_dir, '*.md')).each do |md_path|
next if File.basename(md_path) == 'README.md'
fecha_md = File.basename(md_path, '.md')
if bitacoras_db.include?(fecha_md)
dest = File.join(hist_bitacoras, File.basename(md_path))
FileUtils.mv(md_path, dest)
puts " #{Color::GREEN}✓ Archivada:#{Color::RESET} #{fecha_md}.md"
else
puts " #{Color::YELLOW}⚠ No en DB (se omite):#{Color::RESET} #{fecha_md}.md"
end
end
# 2. Archivar Proyectos
puts "\\n#{Color::BOLD}>> Verificando Proyectos MD...#{Color::RESET}"
proyectos_db = db.send(:execute, "SELECT codigo FROM bitacoras.proyectos").map { |row| row['codigo'] }
Dir.glob(File.join(proyectos_dir, '*.md')).each do |md_path|
next if File.basename(md_path) == 'README.md'
# Extraer el código PXXXX del principio del archivo, asumiendo formato PXXXX_Titulo.md o PXXXX.md
codigo_match = File.basename(md_path).match(/^(P\d+)/)
if codigo_match && proyectos_db.include?(codigo_match[1])
dest = File.join(hist_proyectos, File.basename(md_path))
FileUtils.mv(md_path, dest)
puts " #{Color::GREEN}✓ Archivado Proyecto:#{Color::RESET} #{File.basename(md_path)}"
else
puts " #{Color::YELLOW}⚠ Proyecto no registrado en DB o formato no válido:#{Color::RESET} #{File.basename(md_path)}"
end
end
puts "\\n#{Color::GREEN}✅ Limpieza Markdown finalizada. Entorno 100% DB-First fortalecido.#{Color::RESET}"
end
end
# ─── MÉTODOS AUXILIARES ──────────────────────────────────────────────
# Carga la configuración desde config.yml
@@ -1037,6 +1093,7 @@ module ADN
puts " #{Color::CYAN}nodo:crear [OPCIONES]#{Color::RESET} Crear nuevo nodo (servidor/VM/PC)"
puts " #{Color::CYAN}nodo:listar [OPCIONES]#{Color::RESET} Listar nodos del sistema"
puts " #{Color::CYAN}estadisticas#{Color::RESET} Mostrar estadísticas del sistema"
puts " #{Color::CYAN}archivar:md#{Color::RESET} Mueve los archivos .md migrados al archivo histórico"
puts ""
puts "#{Color::BOLD}Ejemplos:#{Color::RESET}"
puts " ./tools/adn/run db salud:bd"