# report.nim # Module responsable de la génération des rapports sur les modifications effectuées import std/[strformat, strutils] type FileReport* = object sourcePath*: string targetPath*: string status*: string success*: bool Report* = object newMetadata*: seq[string] # Fichiers où des métadonnées ont été ajoutées updatedMetadata*: seq[string] # Fichiers où des métadonnées ont été mises à jour unchanged*: seq[string] # Fichiers inchangés errors*: seq[string] # Erreurs rencontrées fileReports*: seq[FileReport] # Rapports de fichiers individuels proc newReport*(): Report = ## Crée un nouveau rapport vide result = Report( newMetadata: @[], updatedMetadata: @[], unchanged: @[], errors: @[], fileReports: @[] ) proc merge*(self: var Report, other: Report) = ## Fusionne deux rapports self.newMetadata.add(other.newMetadata) self.updatedMetadata.add(other.updatedMetadata) self.unchanged.add(other.unchanged) self.errors.add(other.errors) self.fileReports.add(other.fileReports) proc toString*(report: Report): string = ## Convertit le rapport en chaîne de caractères formatée let totalProcessed = report.newMetadata.len + report.updatedMetadata.len + report.unchanged.len var lines: seq[string] = @[] lines.add("=== Résumé du traitement ===") lines.add(fmt"Total des fichiers traités: {totalProcessed}") lines.add(fmt"Métadonnées ajoutées: {report.newMetadata.len}") lines.add(fmt"Métadonnées mises à jour: {report.updatedMetadata.len}") lines.add(fmt"Fichiers inchangés: {report.unchanged.len}") lines.add(fmt"Erreurs: {report.errors.len}") if report.newMetadata.len > 0: lines.add("") lines.add("=== Fichiers avec métadonnées ajoutées ===") for file in report.newMetadata: lines.add(fmt"- {file}") if report.updatedMetadata.len > 0: lines.add("") lines.add("=== Fichiers avec métadonnées mises à jour ===") for file in report.updatedMetadata: lines.add(fmt"- {file}") if report.errors.len > 0: lines.add("") lines.add("=== Erreurs ===") for error in report.errors: lines.add(fmt"- {error}") return lines.join("\n")