Пример #1
0
        public async Task <IActionResult> Get(long id, [FromCommaSeparatedQuery(Name = "include")] IEnumerable <string> includes)
        {
            var flags = EnumFlags.Parse <CommentIncludes>(includes);
            var query = new GetCommentQuery(User, id)
            {
                IncludeAuthor = CommentIncludes.Authors == (flags & CommentIncludes.Authors)
            };

            var result = await mediator.Send(query, HttpContext.RequestAborted);

            if (false == result.IsSuccess())
            {
                return(NotFound());
            }

            return(Ok(mapper.Map <StoryModel>(result.Data)));
        }
Пример #2
0
        public async Task <IActionResult> Get([FromCommaSeparatedQuery(Name = "include")] IEnumerable <string> includes)
        {
            var flags = EnumFlags.Parse <LandingIncludes>(includes);
            var query = new GetLandingQuery
            {
                IncludeHeroStory     = LandingIncludes.HeroStory == (flags & LandingIncludes.HeroStory),
                FeaturedStoriesCount = LandingIncludes.FeaturedStories == (flags & LandingIncludes.FeaturedStories)
                    ? blogSettings.FeaturedStoriesCount
                    : 0
                                       //StoriesFeedCount = LandingIncludes.StoriesFeed == (flags & LandingIncludes.StoriesFeed)
                                       //    ? blogSettings.FeedStoriesCount
                                       //    : 0
            };

            var result = await mediator.Send(query, HttpContext.RequestAborted);

            if (false == result.IsSuccess())
            {
                foreach (var exception in result.Exceptions)
                {
                    logger.LogError(exception, "[LandingController.Get] Exception");
                }

                return(BadRequest(result.Exceptions));
            }

            //return Ok(mapper.Map<LandingModel>(result.Data));

            return(Ok(new LandingModel
            {
                Title = "",
                Description = "",
                Data = Enumerable.Empty <FeedStoryModel>(),
                Hero = new HeroStoryModel(),
                Featured = Enumerable.Empty <FeedStoryModel>(),
                Meta = new ResourcesMetaInfo
                {
                    Resources = new AuthorsResource
                    {
                        Authors = Enumerable.Empty <AuthorModel>()
                    }
                }
            }));
        }
Пример #3
0
        public async Task <IActionResult> Get(string page, [FromCommaSeparatedQuery(Name = "include")] IEnumerable <string> includes)
        {
            var flags = EnumFlags.Parse <StoryIncludes>(includes);
            var query = new GetStoriesListQuery(User)
            {
                IncludeAuthors  = StoryIncludes.Authors == (flags & StoryIncludes.Authors),
                IncludeComments = StoryIncludes.Comments == (flags & StoryIncludes.Comments),
                Cursor          = (null != page && NavigationCursorEncoder.TryParse(page, out var cursor))
                    ? cursor
                    : NavigationCursor.Forward(0, blogSettings.PageSize)
            };

            var result = await mediator.Send(query, HttpContext.RequestAborted);

            if (false == result.IsSuccess())
            {
                foreach (var exception in result.Exceptions)
                {
                    logger.LogError(exception, "[StoriesController.Get]");
                }

                return(BadRequest(result.Exceptions));
            }

            var    include  = EnumFlags.ToQueryString(flags);
            string backward = null;
            string forward  = null;

            if (null != result.Backward)
            {
                backward = Url.Action("Get", "Stories", new
                {
                    page    = NavigationCursorEncoder.ToEncodedString(result.Backward),
                    include = include.ToString()
                });
            }

            if (null != result.Forward)
            {
                forward = Url.Action("Get", "Stories", new
                {
                    page    = NavigationCursorEncoder.ToEncodedString(result.Forward),
                    include = include.ToString()
                });
            }

            return(Ok(new ListResult <StoryModel, ResourcesMetaInfo>
            {
                Data = result.Select(story =>
                {
                    var model = mapper.Map <StoryModel>(story);

                    model.Author = result.Authors.FindIndex(story.Author);

                    return model;
                }),
                Meta = new ResourcesMetaInfo
                {
                    Resources = new AuthorsResource
                    {
                        Authors = result.Authors.Select(author => mapper.Map <AuthorModel>(author))
                    },
                    Navigation = new Navigation
                    {
                        Previous = backward,
                        Next = forward
                    }
                }
            }));
        }
    }
Пример #4
0
 public void Test2()
 {
     //var include = EnumFlags.ToQueryString(TestFlags.Value1 | TestFlags.Value3);
     var temp = EnumFlags.Parse <TestFlags>(new[] { "value-1", "Value3" }, StringComparer.InvariantCulture);
     //Assert.IsNotNull(include);
 }