package de.galabau.dateieingang.model; import java.nio.file.Path; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; /** * Zustandsobjekt eines einzelnen ZIP-Verarbeitungslaufs. * Wird zu Beginn jeder ZIP-Verarbeitung erstellt und durch die Pipeline-Steps angereichert. */ public class ProcessingContext { /** Eindeutige Datei-ID — wird als MDC-Feld {@code fileId} gesetzt. */ public final UUID fileId; /** Originaler ZIP-Dateiname auf dem SFTP-Server, z.B. {@code export_2026-04-08.zip}. */ public final String zipFilename; /** ZIP-Name ohne Endung, z.B. {@code export_2026-04-08}. Wird als OCI-Unterordner genutzt. */ public final String zipNameWithoutExt; /** Startzeitpunkt des Laufs. */ public final LocalDateTime startTime; /** Lokaler Pfad der heruntergeladenen ZIP-Datei. Gesetzt von {@code SftpService}. */ public Path localZipPath; /** Lokales Verzeichnis mit entpackten Dateien. Gesetzt von {@code ZipExtractionService}. */ public Path localExtractDir; /** Entpackte Dateien. Gesetzt von {@code ZipExtractionService}. */ public List extractedFiles = new ArrayList<>(); /** {@code true} wenn der Marker erfolgreich in OCI hochgeladen wurde. */ public boolean markerUploaded = false; /** Aktueller Verarbeitungsstatus. */ public ProcessingStatus status = ProcessingStatus.PENDING; public ProcessingContext(UUID fileId, String zipFilename) { this.fileId = fileId; this.zipFilename = zipFilename; this.zipNameWithoutExt = zipFilename.endsWith(".zip") ? zipFilename.substring(0, zipFilename.length() - 4) : zipFilename; this.startTime = LocalDateTime.now(); } }