diff --git a/src/RealCV.Infrastructure/Jobs/ProcessCVCheckJob.cs b/src/RealCV.Infrastructure/Jobs/ProcessCVCheckJob.cs
index 7eebb60..ce01638 100644
--- a/src/RealCV.Infrastructure/Jobs/ProcessCVCheckJob.cs
+++ b/src/RealCV.Infrastructure/Jobs/ProcessCVCheckJob.cs
@@ -292,6 +292,8 @@ public sealed class ProcessCVCheckJob
try
{
cvCheck.Status = CheckStatus.Failed;
+ // Store a user-friendly error message
+ cvCheck.ProcessingStage = GetUserFriendlyErrorMessage(ex);
// Use CancellationToken.None to ensure failure status is saved even if original token is cancelled
await _dbContext.SaveChangesAsync(CancellationToken.None);
}
@@ -1424,4 +1426,39 @@ public sealed class ProcessCVCheckJob
obj.FlagType?.ToUpperInvariant() ?? "");
}
}
+
+ ///
+ /// Returns a user-friendly error message based on the exception type.
+ ///
+ private static string GetUserFriendlyErrorMessage(Exception ex)
+ {
+ // Check for specific error patterns
+ var message = ex.Message;
+
+ if (message.Contains("no extractable data", StringComparison.OrdinalIgnoreCase) ||
+ message.Contains("Could not extract any employment", StringComparison.OrdinalIgnoreCase))
+ {
+ return "No useful data could be extracted from this CV. The file may be a scanned image or in an unsupported format.";
+ }
+
+ if (message.Contains("API usage limits", StringComparison.OrdinalIgnoreCase) ||
+ message.Contains("rate limit", StringComparison.OrdinalIgnoreCase))
+ {
+ return "Service temporarily unavailable. Please try again in a few minutes.";
+ }
+
+ if (message.Contains("Could not extract text", StringComparison.OrdinalIgnoreCase))
+ {
+ return "Could not read the CV file. Please ensure it's a valid PDF or DOCX document.";
+ }
+
+ if (message.Contains("password", StringComparison.OrdinalIgnoreCase) ||
+ message.Contains("encrypted", StringComparison.OrdinalIgnoreCase))
+ {
+ return "This CV appears to be password-protected. Please upload an unprotected version.";
+ }
+
+ // Default message
+ return "An error occurred while processing your CV. Please try uploading again.";
+ }
}
diff --git a/src/RealCV.Web/Components/Pages/Report.razor b/src/RealCV.Web/Components/Pages/Report.razor
index 63f963e..eb5d943 100644
--- a/src/RealCV.Web/Components/Pages/Report.razor
+++ b/src/RealCV.Web/Components/Pages/Report.razor
@@ -74,7 +74,7 @@
Processing Failed
- We encountered an error processing your CV. Please try uploading again.
+ @(!string.IsNullOrEmpty(_check.ProcessingStage) ? _check.ProcessingStage : "We encountered an error processing your CV. Please try uploading again.")
}