namespace NovelSoftware.Domain.Entities;
///
/// A character dossier. Every field beyond is optional so a writer can
/// start with a name and fill the sheet in as the character comes into focus.
///
public class Character
{
public Guid Id { get; set; } = Guid.NewGuid();
public Guid ProjectId { get; set; }
public Project? Project { get; set; }
public string Name { get; set; } = string.Empty;
public CharacterRole Role { get; set; } = CharacterRole.Supporting;
public string? Age { get; set; }
public string? Pronouns { get; set; }
public string? Occupation { get; set; }
public string? Appearance { get; set; }
public string? Personality { get; set; }
public string? Backstory { get; set; }
/// What the character consciously wants.
public string? Want { get; set; }
/// What the character actually needs — usually at odds with .
public string? Need { get; set; }
public string? InternalConflict { get; set; }
public string? ExternalConflict { get; set; }
/// How the character changes over the course of the book.
public string? ArcSummary { get; set; }
/// Speech patterns, verbal tics, register — anything that makes dialogue sound like them.
public string? Voice { get; set; }
public string? Notes { get; set; }
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
public DateTimeOffset UpdatedAt { get; set; } = DateTimeOffset.UtcNow;
public List Relationships { get; set; } = [];
}
/// A directed relationship from one character to another.
public class CharacterRelationship
{
public Guid Id { get; set; } = Guid.NewGuid();
public Guid CharacterId { get; set; }
public Character? Character { get; set; }
public Guid RelatedCharacterId { get; set; }
public Character? RelatedCharacter { get; set; }
/// e.g. "sister", "rival", "former mentor".
public string RelationshipType { get; set; } = string.Empty;
public string? Description { get; set; }
}