feat: complete release readiness work
- consolidate API ownership and remove dead vendor code - add Stripe billing, learning paths, and public CV hardening - add migration, recovery, security, audit, and browser gates
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user