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