namespace GermanApp.Domain.Entities; /// /// Represents a lesson in the DeutschLernen system. /// Lessons are organized within CEFR levels and must be completed in order. /// public class Lesson { public int Id { get; private set; } public int LevelId { get; private set; } public string Title { get; private set; } = string.Empty; public int Order { get; private set; } public string Topic { get; private set; } = string.Empty; public string Description { get; private set; } = string.Empty; public bool IsActive { get; private set; } = true; public DateTime CreatedAt { get; private set; } public DateTime? UpdatedAt { get; private set; } // Navigation property (EF Core will handle this) public virtual Level? Level { get; private set; } /// /// Constructor for EF Core deserialization. /// private Lesson() { } /// /// Factory method to create a new lesson. /// /// ID of the parent level /// Title of the lesson /// Sort order within the level /// Main topic covered in the lesson /// Description of what the lesson covers public static Lesson Create(int levelId, string title, int order, string topic, string description = "") { return new Lesson { LevelId = levelId, Title = title, Order = order, Topic = topic, Description = description, CreatedAt = DateTime.UtcNow }; } /// /// Updates the lesson's title. /// public void UpdateTitle(string newTitle) { Title = newTitle; UpdatedAt = DateTime.UtcNow; } /// /// Updates the lesson's topic. /// public void UpdateTopic(string newTopic) { Topic = newTopic; UpdatedAt = DateTime.UtcNow; } /// /// Updates the lesson's description. /// public void UpdateDescription(string newDescription) { Description = newDescription; UpdatedAt = DateTime.UtcNow; } /// /// Updates the lesson's sort order. /// public void UpdateOrder(int newOrder) { Order = newOrder; UpdatedAt = DateTime.UtcNow; } /// /// Updates the lesson's level. /// public void UpdateLevel(int newLevelId) { LevelId = newLevelId; UpdatedAt = DateTime.UtcNow; } /// /// Activates the lesson. /// public void Activate() { IsActive = true; UpdatedAt = DateTime.UtcNow; } /// /// Deactivates the lesson. /// public void Deactivate() { IsActive = false; UpdatedAt = DateTime.UtcNow; } // Navigation properties public virtual ICollection StorySegments { get; private set; } = new List(); }