refactor(api): extract JobApplications DTOs and helpers, fix N+1 aggregation
- Move inline DTOs to JobApplicationDtos.cs, pure static helpers to JobApplicationHelpers.cs - GetStats aggregates server-side (COUNT/GROUP BY) instead of loading the full table - Cache RuleSettings via IMemoryCache, keyed per-user (RulesEngine.GetSettings falls back to per-user UserRuleSettings overrides, so a single global cache key would leak settings across users) - Add missing AsNoTracking() to read-only GET endpoints (GetAll, GetById, GetBoard, GetReminders, GetStatusSuggestion, GetMatchScore, GetCandidateFit, GetFocusPlan, GetInterviewPrep, GetReadiness) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -43,7 +43,7 @@ public sealed class JobApplicationsWorkflowSignalsTests
|
||||
var result = await controller.GetReadiness(job.Id, CancellationToken.None);
|
||||
|
||||
var ok = Assert.IsType<OkObjectResult>(result.Result);
|
||||
var payload = Assert.IsType<JobApplicationsController.ReadinessDto>(ok.Value);
|
||||
var payload = Assert.IsType<ReadinessDto>(ok.Value);
|
||||
|
||||
Assert.Equal("package-work", payload.WorkflowSignal.ActionKey);
|
||||
Assert.True(payload.WorkflowSignal.HasPackageGap);
|
||||
@@ -92,7 +92,7 @@ public sealed class JobApplicationsWorkflowSignalsTests
|
||||
var result = await controller.GetReminders(14, CancellationToken.None);
|
||||
|
||||
var ok = Assert.IsType<OkObjectResult>(result.Result);
|
||||
var payload = Assert.IsType<List<JobApplicationsController.JobApplicationDto>>(ok.Value);
|
||||
var payload = Assert.IsType<List<JobApplicationDto>>(ok.Value);
|
||||
|
||||
var packageReminder = Assert.Single(payload, item => item.Id == packageGapJob.Id);
|
||||
Assert.Equal("package-work", packageReminder.WorkflowSignal.ActionKey);
|
||||
|
||||
Reference in New Issue
Block a user