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; } }