Exemplo n.º 1
0
        public virtual async Task <IActionResult> GetMaterials(GetMaterialsRequest materialsRequest)
        {
            SectionServerCached section = sectionsCache.GetSectionServerCached(materialsRequest.SectionName, User.Roles);

            if (section == null)
            {
                return(BadRequest($"No component {materialsRequest.SectionName} found in cache"));
            }

            MaterialsServerSection sectionData = section.GetData <MaterialsServerSection>();

            if (!("," + sectionData.CategoriesNames + ",").Contains("," + materialsRequest.CategoryName + ","))
            {
                return(BadRequest(
                           $"Can not show {materialsRequest.CategoryName} in {materialsRequest.SectionName} section"));
            }

            CategoryCached category = categoriesCache.GetCategory(materialsRequest.CategoryName);

            if (category == null)
            {
                return(BadRequest($"Can not find {materialsRequest.CategoryName} category"));
            }


            MaterialsShowOptions options = new MaterialsShowOptions
            {
                ShowDeleted = materialsRequest.ShowDeleted,
                CategoryId  = category.Id,
                Page        = materialsRequest.Page,
                Sort        = MaterialsSortOptionsService.MaterialsSortOptions[materialsRequest.Sort]
            };

            using var scope = serviceProvider.CreateScope();
            IMaterialsQueryPresenter materialsQueryPresenter =
                (IMaterialsQueryPresenter)scope.ServiceProvider.GetRequiredService(MaterialsPresenterTypes.GetBySection(section));

            return(await CacheContentAsync(category, category.Id,
                                           () => materialsQueryPresenter.GetMaterialsByCategoryAsync(options), new RequestOptions()
            {
                Sort = materialsRequest.Sort,
                PageNumber = materialsRequest.Page
            }));
        }