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
@@ -22,7 +22,9 @@ public sealed record SubmittedPackageDetailDto(
SubmittedPackageDto Summary,
string? RenderedCvHtml,
string? CoverLetterText,
string ApplicationMaterialJson);
string ApplicationMaterialJson,
string? RenderedCoverLetterHtml = null,
CoverLetterDocumentSettings? CoverLetterDocumentSettings = null);
public interface ISubmittedApplicationPackageService
{
@@ -89,6 +91,9 @@ public sealed class SubmittedApplicationPackageService : ISubmittedApplicationPa
CareerProfileJson = profile?.ProfileJson,
RenderedCvHtml = render?.Html,
CoverLetterText = job.CoverLetterText,
CoverLetterDocumentSettingsJson = CoverLetterDocumentSettingsJson.Serialize(CoverLetterDocumentSettingsJson.Deserialize(job.CoverLetterDocumentSettingsJson)),
RenderedCoverLetterHtml = string.IsNullOrWhiteSpace(job.CoverLetterText) ? null
: new CoverLetterDocumentRenderer().Render(job.CoverLetterText, CoverLetterDocumentSettingsJson.Deserialize(job.CoverLetterDocumentSettingsJson)).Html,
ApplicationMaterialJson = JsonSerializer.Serialize(new
{
job.TailoredCvText,
@@ -149,7 +154,8 @@ public sealed class SubmittedApplicationPackageService : ISubmittedApplicationPa
var package = await _db.SubmittedApplicationPackages.AsNoTracking()
.Include(x => x.Attachments)
.FirstOrDefaultAsync(x => x.Id == packageId && x.JobApplicationId == jobApplicationId && x.OwnerUserId == ownerUserId, ct);
return package is null ? null : new SubmittedPackageDetailDto(ToDto(package), package.RenderedCvHtml, package.CoverLetterText, package.ApplicationMaterialJson);
return package is null ? null : new SubmittedPackageDetailDto(ToDto(package), package.RenderedCvHtml, package.CoverLetterText, package.ApplicationMaterialJson,
package.RenderedCoverLetterHtml, package.CoverLetterDocumentSettingsJson is null ? null : CoverLetterDocumentSettingsJson.Deserialize(package.CoverLetterDocumentSettingsJson));
}
public async Task<SubmittedPackageFile?> GetAttachmentAsync(string ownerUserId, int jobApplicationId, int packageId, int attachmentId, CancellationToken ct)