namespace JobTrackerApi.Models; // Phase 5.4 — Application Assets. // // Append-only history for a job application's cover letter. JobApplication.CoverLetterText stays the // CURRENT text and the existing API contract around it is unchanged; this only records what it used // to be, so an AI rewrite or a bad edit is never destructive. Mirrors CvVariantVersion: restore // re-saves an old snapshot as a new version rather than rewinding. // // Reconciler-owned (docs/infrastructure/database-ownership.md) — its migration is a no-op. public sealed class CoverLetterVersion { public int Id { get; set; } public string OwnerUserId { get; set; } = string.Empty; public int JobApplicationId { get; set; } public JobApplication? JobApplication { get; set; } public int Version { get; set; } public string Text { get; set; } = string.Empty; // manual | ai | template | restore — how this text came to exist, so the history list can show // whether the user wrote it or approved it from a suggestion. public string Source { get; set; } = "manual"; // For an AI-sourced version: which action produced it (generate | improve | shorten | expand | // tone | tailor). Null for anything the user typed. public string? AiAction { get; set; } public DateTimeOffset CreatedAtUtc { get; set; } = DateTimeOffset.UtcNow; } public static class CoverLetterSources { public const string Manual = "manual"; public const string Ai = "ai"; public const string Template = "template"; public const string Restore = "restore"; public static bool IsValid(string? value) => value is Manual or Ai or Template or Restore; }