namespace Yes.Application.Blogs { public record GetIndexViewQuery(NameValueCollection NameValueCollection) : IRequest; public record IndexViewModel( MetaModel Meta, BlogModel Blog, List Categories, List Tags, List Archives, List SinglePages, PagedList Articles ); public class GetIndexViewQueryHandler( IBlogService blogService, IOptionsMonitor options, IMapper mapper ) : IRequestHandler { private readonly IBlogService _blogService = blogService; private readonly BlogSettings _settings = options.CurrentValue; private readonly IMapper _mapper = mapper; public async Task Handle(GetIndexViewQuery request, CancellationToken cancellationToken) { var pageIndex = request.NameValueCollection.QueryInt(BlogRouteConst.PageIndex, 1); var blogModel = _mapper.Map(_settings); var categories = await _blogService.GetAllCategories(); var articles = await _blogService.GetIndexArticles(pageIndex, _settings.PageSizeOfHomepage); var pages = await _blogService.GetSinglePages(); var tags = await _blogService.GetTags(); var archives = await _blogService.GetArchives(); var meta = GetMeta(_settings); return new IndexViewModel(meta, blogModel, categories, tags, archives, pages, articles); } private MetaModel GetMeta(BlogSettings blogSettings) { return new MetaModel { Description = blogSettings.Description, Keywords = blogSettings.Keywords, Title = blogSettings.Name, }; } } }