Implement code review fixes and improvements

- Move admin credentials from hardcoded values to configuration
- Add rate limiting (5/min) to login endpoint for brute force protection
- Extract CleanJsonResponse to shared JsonResponseHelper class
- Add DateHelpers.MonthsBetween utility and consolidate date calculations
- Update PdfReportService to use ScoreThresholds constants
- Remove 5 unused shared components (EmploymentTable, FlagsList, etc.)
- Clean up unused CSS from MainLayout.razor.css
- Create IPdfReportService interface for better testability
- Add authentication requirement to Hangfire dashboard in development
- Seal EducationVerifierService class

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-21 02:09:26 +01:00
parent 3a33119bea
commit 45ca5f6a05
19 changed files with 141 additions and 1445 deletions

View File

@@ -7,6 +7,7 @@ using TrueCV.Application.Helpers;
using TrueCV.Application.Interfaces;
using TrueCV.Application.Models;
using TrueCV.Infrastructure.Configuration;
using TrueCV.Infrastructure.Helpers;
namespace TrueCV.Infrastructure.Services;
@@ -112,7 +113,7 @@ public sealed class AICompanyNameMatcherService : ICompanyNameMatcherService
return null;
}
responseText = CleanJsonResponse(responseText);
responseText = JsonResponseHelper.CleanJsonResponse(responseText);
var aiResponse = JsonSerializer.Deserialize<AIMatchResponse>(responseText, JsonDefaults.CamelCase);
@@ -163,25 +164,4 @@ public sealed class AICompanyNameMatcherService : ICompanyNameMatcherService
return null; // Fall back to fuzzy matching
}
}
private static string CleanJsonResponse(string response)
{
var trimmed = response.Trim();
if (trimmed.StartsWith("```json", StringComparison.OrdinalIgnoreCase))
{
trimmed = trimmed[7..];
}
else if (trimmed.StartsWith("```"))
{
trimmed = trimmed[3..];
}
if (trimmed.EndsWith("```"))
{
trimmed = trimmed[..^3];
}
return trimmed.Trim();
}
}