feat(jobs): complete workspace draft parity
This commit is contained in:
@@ -34,6 +34,8 @@ public sealed record WorkspaceOverviewDto(
|
||||
string? DescriptionLanguage,
|
||||
IReadOnlyList<string> Tags,
|
||||
string? Notes,
|
||||
string? ApplicationAnswerDraft,
|
||||
string? RecruiterMessageDraft,
|
||||
string? Source,
|
||||
string? CountryCode,
|
||||
bool HasJobDescription,
|
||||
@@ -131,7 +133,9 @@ public sealed class ApplicationWorkspaceService : IApplicationWorkspaceService
|
||||
job.TranslatedDescription,
|
||||
job.DescriptionLanguage,
|
||||
JobApplicationHelpers.SplitTags(job.Tags).Distinct(StringComparer.OrdinalIgnoreCase).ToList(),
|
||||
job.Notes,
|
||||
JobApplicationHelpers.RemoveSavedApplicationAnswerDraft(job.Notes),
|
||||
JobApplicationHelpers.ExtractSavedApplicationAnswerDraft(job.Notes),
|
||||
job.RecruiterMessageDraft,
|
||||
job.Job?.Source,
|
||||
job.Job?.CountryCode,
|
||||
!string.IsNullOrWhiteSpace(job.Description) || !string.IsNullOrWhiteSpace(job.TranslatedDescription),
|
||||
|
||||
@@ -281,6 +281,21 @@ namespace JobTrackerApi.Services
|
||||
return null;
|
||||
}
|
||||
|
||||
public static string? UpsertSavedApplicationAnswerDraft(string? notes, string? draft)
|
||||
{
|
||||
var humanNotes = RemoveSavedApplicationAnswerDraft(notes);
|
||||
var answer = (draft ?? string.Empty).Trim();
|
||||
if (string.IsNullOrWhiteSpace(answer))
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(humanNotes) ? null : humanNotes;
|
||||
}
|
||||
|
||||
var answerBlock = $"{ApplicationAnswerDraftStart}\n{answer}\n{ApplicationAnswerDraftEnd}";
|
||||
return string.IsNullOrWhiteSpace(humanNotes)
|
||||
? answerBlock
|
||||
: $"{humanNotes}\n\n{answerBlock}";
|
||||
}
|
||||
|
||||
public static string BuildFollowUpSubject(JobApplication job, Correspondence? lastMessage)
|
||||
{
|
||||
var subject = (lastMessage?.Subject ?? string.Empty).Trim();
|
||||
@@ -467,13 +482,14 @@ namespace JobTrackerApi.Services
|
||||
var value = notes ?? string.Empty;
|
||||
if (string.IsNullOrWhiteSpace(value)) return string.Empty;
|
||||
|
||||
var startIndex = value.IndexOf(ApplicationAnswerDraftStart, StringComparison.Ordinal);
|
||||
var endIndex = value.IndexOf(ApplicationAnswerDraftEnd, StringComparison.Ordinal);
|
||||
if (startIndex >= 0 && endIndex > startIndex)
|
||||
while (true)
|
||||
{
|
||||
var startIndex = value.IndexOf(ApplicationAnswerDraftStart, StringComparison.Ordinal);
|
||||
var endIndex = value.IndexOf(ApplicationAnswerDraftEnd, StringComparison.Ordinal);
|
||||
if (startIndex < 0 || endIndex <= startIndex) break;
|
||||
var before = value[..startIndex].Trim();
|
||||
var after = value[(endIndex + ApplicationAnswerDraftEnd.Length)..].Trim();
|
||||
return string.Join("\n\n", new[] { before, after }.Where(part => !string.IsNullOrWhiteSpace(part))).Trim();
|
||||
value = string.Join("\n\n", new[] { before, after }.Where(part => !string.IsNullOrWhiteSpace(part))).Trim();
|
||||
}
|
||||
|
||||
const string legacyPrefix = "Application answer draft:";
|
||||
|
||||
Reference in New Issue
Block a user