namespace PlotLine.Models; public static class StoryIntelligenceReviewModules { public const string Characters = "Characters"; public const string Locations = "Locations"; public const string Assets = "Assets"; public const string Relationships = "Relationships"; public const string Knowledge = "Knowledge"; } public static class StoryIntelligenceReviewCandidateGenerationStatuses { public const string Preparing = "Preparing"; public const string Ready = "Ready"; public const string Failed = "Failed"; } public sealed class StoryIntelligenceReviewCandidateGeneration { public int ReviewCandidateGenerationID { get; init; } public int ProjectID { get; init; } public int BookID { get; init; } public string Module { get; init; } = string.Empty; public string Status { get; init; } = string.Empty; public string Source { get; init; } = string.Empty; public int CandidateCount { get; init; } public int PendingCount { get; init; } public string? ErrorMessage { get; init; } public bool IsCurrent { get; init; } public DateTime CreatedUtc { get; init; } public DateTime? PreparedUtc { get; init; } public DateTime? FailedUtc { get; init; } public DateTime UpdatedUtc { get; init; } } public sealed class StoryIntelligenceReviewCandidateRow { public int ReviewCandidateID { get; init; } public int ReviewCandidateGenerationID { get; init; } public int ProjectID { get; init; } public int BookID { get; init; } public string Module { get; init; } = string.Empty; public string StableKey { get; init; } = string.Empty; public string? CandidateType { get; init; } public string DisplayName { get; init; } = string.Empty; public int SortOrder { get; init; } public decimal? Confidence { get; init; } public int? ExistingCanonicalID { get; init; } public string DecisionStatus { get; init; } = string.Empty; public string? DecisionAction { get; init; } public string? DecisionTargetKey { get; init; } public int? DecisionCanonicalID { get; init; } public string CandidatePayloadJson { get; init; } = string.Empty; public DateTime CreatedUtc { get; init; } public DateTime? ReviewedUtc { get; init; } public DateTime UpdatedUtc { get; init; } public int TotalCount { get; init; } public int PendingCount { get; init; } } public sealed class StoryIntelligenceReviewCandidateSaveRequest { public int ReviewCandidateGenerationID { get; init; } public int ProjectID { get; init; } public int BookID { get; init; } public string Module { get; init; } = string.Empty; public string StableKey { get; init; } = string.Empty; public string? CandidateType { get; init; } public string DisplayName { get; init; } = string.Empty; public int SortOrder { get; init; } public decimal? Confidence { get; init; } public int? ExistingCanonicalID { get; init; } public string CandidatePayloadJson { get; init; } = string.Empty; } public sealed class StoryIntelligenceReviewCandidateDecisionRequest { public int BookID { get; init; } public string Module { get; init; } = string.Empty; public string StableKey { get; init; } = string.Empty; public string DecisionAction { get; init; } = string.Empty; public string? DecisionTargetKey { get; init; } public int? DecisionCanonicalID { get; init; } }