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