Nachbearbeitung: DocumentProcessingCoordinator strukturell entflechtet
This commit is contained in:
@@ -27,6 +27,7 @@ import org.apache.logging.log4j.Logger;
|
|||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Application-level service that implements the per-document processing logic.
|
* Application-level service that implements the per-document processing logic.
|
||||||
@@ -141,56 +142,7 @@ public class DocumentProcessingCoordinator {
|
|||||||
Objects.requireNonNull(context, "context must not be null");
|
Objects.requireNonNull(context, "context must not be null");
|
||||||
Objects.requireNonNull(attemptStart, "attemptStart must not be null");
|
Objects.requireNonNull(attemptStart, "attemptStart must not be null");
|
||||||
|
|
||||||
// Step 1: Load the document master record
|
processWithM3Execution(candidate, fingerprint, context, attemptStart, ignored -> m3Outcome);
|
||||||
DocumentRecordLookupResult lookupResult =
|
|
||||||
documentRecordRepository.findByFingerprint(fingerprint);
|
|
||||||
|
|
||||||
// Step 2: Handle persistence lookup failure – cannot safely proceed
|
|
||||||
if (lookupResult instanceof PersistenceLookupTechnicalFailure failure) {
|
|
||||||
LOG.error("Cannot process '{}': master record lookup failed: {}",
|
|
||||||
candidate.uniqueIdentifier(), failure.errorMessage());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Step 3: Determine the action based on the lookup result
|
|
||||||
switch (lookupResult) {
|
|
||||||
case DocumentTerminalSuccess terminalSuccess -> {
|
|
||||||
// Document already successfully processed → skip
|
|
||||||
LOG.info("Skipping '{}': already successfully processed (fingerprint: {}).",
|
|
||||||
candidate.uniqueIdentifier(), fingerprint.sha256Hex());
|
|
||||||
persistSkipAttempt(
|
|
||||||
candidate, fingerprint, terminalSuccess.record(),
|
|
||||||
ProcessingStatus.SKIPPED_ALREADY_PROCESSED,
|
|
||||||
context, attemptStart);
|
|
||||||
}
|
|
||||||
|
|
||||||
case DocumentTerminalFinalFailure terminalFailure -> {
|
|
||||||
// Document finally failed → skip
|
|
||||||
LOG.info("Skipping '{}': already finally failed (fingerprint: {}).",
|
|
||||||
candidate.uniqueIdentifier(), fingerprint.sha256Hex());
|
|
||||||
persistSkipAttempt(
|
|
||||||
candidate, fingerprint, terminalFailure.record(),
|
|
||||||
ProcessingStatus.SKIPPED_FINAL_FAILURE,
|
|
||||||
context, attemptStart);
|
|
||||||
}
|
|
||||||
|
|
||||||
case DocumentUnknown ignored -> {
|
|
||||||
// New document – process and create a new master record
|
|
||||||
processAndPersistNewDocument(candidate, fingerprint, m3Outcome, context, attemptStart);
|
|
||||||
}
|
|
||||||
|
|
||||||
case DocumentKnownProcessable knownProcessable -> {
|
|
||||||
// Known but not terminal – process and update the existing master record
|
|
||||||
processAndPersistKnownDocument(
|
|
||||||
candidate, fingerprint, m3Outcome, knownProcessable.record(),
|
|
||||||
context, attemptStart);
|
|
||||||
}
|
|
||||||
|
|
||||||
default ->
|
|
||||||
// Exhaustive sealed hierarchy; this branch is unreachable
|
|
||||||
LOG.error("Unexpected lookup result type for '{}': {}",
|
|
||||||
candidate.uniqueIdentifier(), lookupResult.getClass().getSimpleName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -225,7 +177,7 @@ public class DocumentProcessingCoordinator {
|
|||||||
DocumentFingerprint fingerprint,
|
DocumentFingerprint fingerprint,
|
||||||
BatchRunContext context,
|
BatchRunContext context,
|
||||||
Instant attemptStart,
|
Instant attemptStart,
|
||||||
java.util.function.Function<SourceDocumentCandidate, DocumentProcessingOutcome> m3Executor) {
|
Function<SourceDocumentCandidate, DocumentProcessingOutcome> m3Executor) {
|
||||||
|
|
||||||
Objects.requireNonNull(candidate, "candidate must not be null");
|
Objects.requireNonNull(candidate, "candidate must not be null");
|
||||||
Objects.requireNonNull(fingerprint, "fingerprint must not be null");
|
Objects.requireNonNull(fingerprint, "fingerprint must not be null");
|
||||||
|
|||||||
Reference in New Issue
Block a user