Fix #58: Verschluckte Exception in ResolveHistoricalFileName loggen
Catch von Exception auf RuntimeException eingeengt; unerwartete Laufzeitfehler werden jetzt per logger.warn() protokolliert und weiterpropagiert statt still verschluckt zu werden. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+20
-11
@@ -3,6 +3,9 @@ package de.gecheckt.pdf.umbenenner.application.usecase;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import de.gecheckt.pdf.umbenenner.application.port.in.ResolveHistoricalFileNameUseCase;
|
||||
import de.gecheckt.pdf.umbenenner.application.port.out.DocumentRecordLookupResult;
|
||||
import de.gecheckt.pdf.umbenenner.application.port.out.DocumentRecordRepository;
|
||||
@@ -10,20 +13,24 @@ import de.gecheckt.pdf.umbenenner.application.port.out.DocumentTerminalSuccess;
|
||||
import de.gecheckt.pdf.umbenenner.domain.model.DocumentFingerprint;
|
||||
|
||||
/**
|
||||
* Default implementation of {@link ResolveHistoricalFileNameUseCase}.
|
||||
* Standardimplementierung von {@link ResolveHistoricalFileNameUseCase}.
|
||||
* <p>
|
||||
* Queries the {@link DocumentRecordRepository} for the master record of the given fingerprint.
|
||||
* If the record represents a document that previously reached a successful terminal state,
|
||||
* the last known target filename ({@code lastTargetFileName}) is returned.
|
||||
* Fragt den {@link DocumentRecordRepository} nach dem Stammsatz des angegebenen
|
||||
* Fingerprints ab. Ist der Stammsatz terminal erfolgreich, wird der zuletzt
|
||||
* geschriebene Zieldateiname zurückgegeben.
|
||||
* <p>
|
||||
* For all other terminal states (e.g. documents that finally failed without ever producing
|
||||
* a target copy) or when no master record exists, an empty {@link Optional} is returned.
|
||||
* Technical failures during the repository lookup are caught silently and treated as
|
||||
* an absent result so that the calling GUI layer is never forced to handle exceptions
|
||||
* from this query path.
|
||||
* Für alle anderen terminalen Zustände oder wenn kein Stammsatz vorhanden ist,
|
||||
* wird ein leeres {@link Optional} zurückgegeben.
|
||||
* Unerwartete {@link RuntimeException}s aus dem Repository werden geloggt (WARN) und
|
||||
* weiterpropagiert. Erwartete Lookup-Fehler werden als
|
||||
* {@code PersistenceLookupTechnicalFailure} im Rückgabewert kodiert und führen
|
||||
* zu einem leeren {@link Optional}.
|
||||
*/
|
||||
public class DefaultResolveHistoricalFileNameUseCase implements ResolveHistoricalFileNameUseCase {
|
||||
|
||||
private static final Logger logger =
|
||||
LogManager.getLogger(DefaultResolveHistoricalFileNameUseCase.class);
|
||||
|
||||
private final DocumentRecordRepository documentRecordRepository;
|
||||
|
||||
/**
|
||||
@@ -62,8 +69,10 @@ public class DefaultResolveHistoricalFileNameUseCase implements ResolveHistorica
|
||||
return Optional.ofNullable(success.record().lastTargetFileName());
|
||||
}
|
||||
return Optional.empty();
|
||||
} catch (Exception e) {
|
||||
return Optional.empty();
|
||||
} catch (RuntimeException e) {
|
||||
logger.warn("Unerwarteter Fehler beim Lesen des historischen Dateinamens für Fingerprint {}: {}",
|
||||
fingerprint, e.getMessage(), e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user