feat(cv): redesign document editing with revision-safe letters and writing tools

This commit is contained in:
cesnimda
2026-10-25 22:44:14 +01:00
parent 01e10996c5
commit 2bfaf6c14b
57 changed files with 2859 additions and 118 deletions
@@ -781,7 +781,6 @@ Canonical profile:
DescriptionLanguage = string.IsNullOrWhiteSpace(request.DescriptionLanguage) ? null : request.DescriptionLanguage.Trim(),
Tags = NormalizeTags(request.Tags),
Deadline = request.Deadline,
CoverLetterText = string.IsNullOrWhiteSpace(request.CoverLetterText) ? null : request.CoverLetterText,
JobUrl = NormalizeUrl(request.JobUrl),
DateApplied = request.DateApplied ?? DateTime.Now,
ResponseReceived = false,
@@ -815,7 +814,11 @@ Canonical profile:
JobOpportunitySync.Apply(job, job.Job);
_db.JobApplications.Add(job);
await _db.SaveChangesAsync(cancellationToken);
await ApplicationAssetsService.StageCoverLetterAsync(_db, job,
string.IsNullOrWhiteSpace(request.CoverLetterText) ? null : request.CoverLetterText,
CoverLetterSources.Manual, null, cancellationToken);
try { await _db.SaveChangesAsync(cancellationToken); }
catch { _db.ChangeTracker.Clear(); throw; }
_db.JobEvents.Add(new JobEvent
{
@@ -881,7 +884,8 @@ Canonical profile:
job.DescriptionLanguage = request.DescriptionLanguage;
job.Tags = NormalizeTags(request.Tags);
job.Deadline = request.Deadline;
job.CoverLetterText = request.CoverLetterText;
await ApplicationAssetsService.StageCoverLetterAsync(_db, job, request.CoverLetterText,
CoverLetterSources.Manual, null, cancellationToken);
job.JobUrl = NormalizeUrl(request.JobUrl);
if (request.DateApplied is not null) job.DateApplied = request.DateApplied.Value;
// Status may have changed above; keep DateApplied consistent with the stage.
@@ -1583,7 +1587,9 @@ Candidate CV/profile:
if (request.CoverLetterText is not null)
{
job.CoverLetterText = string.IsNullOrWhiteSpace(request.CoverLetterText) ? null : request.CoverLetterText.Trim();
await ApplicationAssetsService.StageCoverLetterAsync(_db, job,
string.IsNullOrWhiteSpace(request.CoverLetterText) ? null : request.CoverLetterText.Trim(),
CoverLetterSources.Manual, null, cancellationToken);
}
if (request.Notes is not null)
@@ -1604,7 +1610,8 @@ Candidate CV/profile:
}
_db.Entry(job).Property(x => x.Version).IsModified = true;
await _db.SaveChangesAsync(cancellationToken);
try { await _db.SaveChangesAsync(cancellationToken); }
catch { _db.ChangeTracker.Clear(); throw; }
Response.Headers["X-Job-Version"] = job.Version.ToString(System.Globalization.CultureInfo.InvariantCulture);
return NoContent();
}