PlotDirector/PlotLine/Models/CharacterIntelligenceModels.cs

139 lines
5.0 KiB
C#

using System.Text.Json.Serialization;
namespace PlotLine.Models;
public sealed class CharacterIntelligenceProfile
{
public int CharacterIntelligenceProfileID { get; init; }
public int ImportSessionID { get; init; }
public int ProjectID { get; init; }
public int BookID { get; init; }
public string CanonicalIdentityKey { get; init; } = string.Empty;
public string CanonicalName { get; init; } = string.Empty;
public string ProfileJson { get; init; } = string.Empty;
public decimal Confidence { get; init; }
public string? NarrativeImportance { get; init; }
public bool IsRecurring { get; init; }
public string EvidenceVersion { get; init; } = CharacterIntelligenceVersions.Current;
public int? LastUpdatedSceneResultID { get; init; }
public DateTime CreatedUtc { get; init; }
public DateTime UpdatedUtc { get; init; }
}
public static class CharacterIntelligenceVersions
{
public const string Current = "22";
}
public sealed class CharacterIntelligenceProfileDocument
{
public string CanonicalName { get; set; } = string.Empty;
public List<string> Aliases { get; set; } = [];
public string? RoleInStory { get; set; }
public string? NarrativeImportance { get; set; }
public string? Presentation { get; set; }
public string? EstimatedAge { get; set; }
public string? EstimatedAgeBand { get; set; }
public string? HairColour { get; set; }
public string? HairLength { get; set; }
public string? HairStyle { get; set; }
public string? EyeColour { get; set; }
public string? SkinTone { get; set; }
public string? Height { get; set; }
public string? Build { get; set; }
public List<string> DistinctiveFeatures { get; set; } = [];
public string? TypicalClothing { get; set; }
public string? Occupation { get; set; }
public List<string> Relationships { get; set; } = [];
public string? CurrentStatus { get; set; }
public decimal Confidence { get; set; }
public List<CharacterIntelligenceEvidenceItem> EvidenceTimeline { get; set; } = [];
public List<CharacterIntelligenceContradiction> Contradictions { get; set; } = [];
public DateTime LastUpdatedUtc { get; set; }
}
public sealed class CharacterIntelligenceEvidenceItem
{
public int? SceneResultID { get; set; }
public decimal? ChapterNumber { get; set; }
public int? SceneNumber { get; set; }
public string FieldName { get; set; } = string.Empty;
public string? Value { get; set; }
public string Evidence { get; set; } = string.Empty;
public decimal Confidence { get; set; }
public DateTime RecordedUtc { get; set; } = DateTime.UtcNow;
}
public sealed class CharacterIntelligenceContradiction
{
public string FieldName { get; set; } = string.Empty;
public string? ExistingValue { get; set; }
public string? NewValue { get; set; }
public string Evidence { get; set; } = string.Empty;
public decimal Confidence { get; set; }
public int? SceneResultID { get; set; }
}
public sealed record CharacterIntelligenceProfileSave(
int ImportSessionID,
int ProjectID,
int BookID,
string CanonicalIdentityKey,
string CanonicalName,
string ProfileJson,
decimal Confidence,
string? NarrativeImportance,
bool IsRecurring,
string EvidenceVersion,
int SceneResultID);
public sealed record CharacterIntelligenceEvidenceSave(
int CharacterIntelligenceProfileID,
int SceneResultID,
string FieldName,
string? PreviousValue,
string? NewValue,
string Evidence,
decimal Confidence,
bool IsContradiction,
string Source);
public sealed class CharacterIntelligenceProfileUpdateResponse
{
public string SchemaVersion { get; init; } = CharacterIntelligenceVersions.Current;
public List<CharacterIntelligenceProfileUpdate> Updates { get; init; } = [];
}
public sealed class CharacterIntelligenceProfileUpdate
{
public string CanonicalName { get; init; } = string.Empty;
public List<string> Aliases { get; init; } = [];
public string? RecurrenceSignal { get; init; }
public decimal Confidence { get; init; }
public List<CharacterIntelligenceFieldUpdate> FieldUpdates { get; init; } = [];
public List<CharacterIntelligenceAiContradiction> Contradictions { get; init; } = [];
[JsonExtensionData]
public Dictionary<string, System.Text.Json.JsonElement>? ExtensionData { get; init; }
}
public sealed class CharacterIntelligenceFieldUpdate
{
public string FieldName { get; init; } = string.Empty;
public string? Value { get; init; }
public string Evidence { get; init; } = string.Empty;
public decimal Confidence { get; init; }
public bool IsNewInformation { get; init; }
public bool IncreasesCertainty { get; init; }
}
public sealed class CharacterIntelligenceAiContradiction
{
public string FieldName { get; init; } = string.Empty;
public string? ExistingValue { get; init; }
public string? NewValue { get; init; }
public string Evidence { get; init; } = string.Empty;
public decimal Confidence { get; init; }
}