using CMSMicroservice.Application.Common.Exceptions; using CMSMicroservice.Application.Common.Interfaces; using CMSMicroservice.Domain.Entities.Content; using MediatR; using Microsoft.EntityFrameworkCore; namespace CMSMicroservice.Application.SitePageCQ.Queries.GetSitePage; public class GetSitePageQueryHandler : IRequestHandler { private readonly IApplicationDbContext _context; public GetSitePageQueryHandler(IApplicationDbContext context) { _context = context; } public async Task Handle(GetSitePageQuery request, CancellationToken cancellationToken) { var entity = await _context.SitePages .Include(x => x.Sections.Where(s => !s.IsDeleted).OrderBy(s => s.SortOrder)) .FirstOrDefaultAsync(x => x.Id == request.Id && !x.IsDeleted, cancellationToken); if (entity == null) throw new NotFoundException(nameof(SitePage), request.Id); return MapToDto(entity); } internal static SitePageDto MapToDto(SitePage entity) { return new SitePageDto { Id = entity.Id, PageKey = entity.PageKey, Title = entity.Title, MetaDescription = entity.MetaDescription, HeroTitle = entity.HeroTitle, HeroSubtitle = entity.HeroSubtitle, HeroImagePath = entity.HeroImagePath, IsActive = entity.IsActive, Created = entity.Created, LastModified = entity.LastModified, Sections = entity.Sections.Select(s => new SitePageSectionDto { Id = s.Id, SectionKey = s.SectionKey, Title = s.Title, Subtitle = s.Subtitle, HtmlContent = s.HtmlContent, IconName = s.IconName, ImagePath = s.ImagePath, SortOrder = s.SortOrder, IsActive = s.IsActive, ExtraData = s.ExtraData }).ToList() }; } }