using GermanApp.Domain.Entities;
namespace GermanApp.Application.DTOs;
///
/// Data Transfer Object for Lesson - used for API responses.
/// This is a read-only representation of a Lesson entity.
///
public record LessonDto(
int Id,
string Title,
string Description,
int LevelId,
string LevelName,
string LevelCode,
int Order,
string Topic,
DateTime CreatedAt,
DateTime? UpdatedAt);
///
/// Data Transfer Object for creating a new Lesson.
///
public record CreateLessonDto(
string Title,
string Description,
int LevelId,
int Order,
string Topic);
///
/// Data Transfer Object for updating an existing Lesson.
///
public record UpdateLessonDto(
string Title,
string Description,
int LevelId,
int Order,
string Topic);
///
/// Extension methods for mapping between Lesson entity and DTOs.
///
public static class LessonDtoExtensions
{
public static LessonDto ToDto(this Lesson lesson) => new(
lesson.Id,
lesson.Title,
lesson.Description,
lesson.LevelId,
lesson.Level?.Name ?? "Unknown",
lesson.Level?.Code ?? "??",
lesson.Order,
lesson.Topic,
lesson.CreatedAt,
lesson.UpdatedAt);
public static Lesson ToEntity(this CreateLessonDto dto) =>
Lesson.Create(dto.LevelId, dto.Title, dto.Order, dto.Topic, dto.Description);
public static void UpdateFromDto(this Lesson lesson, UpdateLessonDto dto)
{
lesson.UpdateTitle(dto.Title);
lesson.UpdateDescription(dto.Description);
lesson.UpdateLevel(dto.LevelId);
lesson.UpdateOrder(dto.Order);
lesson.UpdateTopic(dto.Topic);
}
}