Пример #1
0
        /// <inheritdoc cref="IBlogApiClient.GetStoriesAsync" />
        public async Task <ListResult <StoryModel, ResourcesMetaInfo> > GetStoriesAsync(StoryIncludes flags)
        {
            var path       = new Uri(baseUri, "stories");
            var include    = EnumFlags.ToQueryString(flags);
            var query      = QueryString.Create(nameof(include), include);
            var requestUri = new UriBuilder(path)
            {
                Query = query.ToUriComponent()
            }.Uri;

            try
            {
                using (var response = await client.GetAsync(requestUri, CancellationToken.None))
                {
                    response.EnsureSuccessStatusCode();

                    var json = await response.Content.ReadAsStringAsync();

                    var data = Json.Deserialize <ListResult <StoryModel, ResourcesMetaInfo> >(json);

                    return(data);
                }
            }
            catch (HttpRequestException exception)
            {
                return(new ListResult <StoryModel, ResourcesMetaInfo>());
            }
        }
Пример #2
0
        public void Test3()
        {
            var include = EnumFlags.ToQueryString(TestFlags.Value1 | TestFlags.Value2);

            //var temp = EnumFlags.Parse<TestFlags>(new[] {"value-1", "Value3"}, StringComparer.InvariantCulture);
            Assert.IsNotNull(include);
        }
Пример #3
0
        /// <inheritdoc cref="IBlogApiClient.GetStoriesAsync" />
        public async Task <LandingModel> GetLandingAsync(LandingIncludes flags)
        {
            var path       = new Uri(baseUri, "landing");
            var include    = EnumFlags.ToQueryString(flags);
            var query      = QueryString.Create(nameof(include), include);
            var requestUri = new UriBuilder(path)
            {
                Query = query.ToUriComponent()
            }.Uri;

            try
            {
                if (null != authorizationToken)
                {
                    client.SetBearerToken(authorizationToken.Token);
                }

                using (var response = await client.GetAsync(requestUri, CancellationToken.None))
                {
                    response.EnsureSuccessStatusCode();

                    var json = await response.Content.ReadAsStringAsync();

                    var data = Json.Deserialize <LandingModel>(json);

                    return(data);
                }
            }
            catch (HttpRequestException)
            {
                return(new LandingModel());
            }
        }
Пример #4
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
                    }
                }
            }));
        }
    }