Пример #1
0
        public async Task <ActionResult <ResponseWrapper> > GetShareDataAsync([FromQuery] string s, [FromQuery] string t, [FromQuery] string k, [FromQuery] bool c, [FromQuery] PagingParameters pagingParameters)
        {
            PagedList <PostViewModel> posts = null;

            var descryptedStr = Encryptor.DecryptDES(s, _decryptKey, _decryptKey);

            if (descryptedStr != s)
            {
                var shareInfo = JsonConvert.DeserializeObject <ShareInfo>(descryptedStr);

                _logger.LogInformation("GetShareDataAsync: {@ShareInfo}", shareInfo);

                // 优先搜索加密对象中的分类,若其无值,则搜索url参数中的分类
                // 其场景是:客户端可以分享三种类型,1. 单个帖子,2. 帖子分类,3. 用户的全部帖子
                // 当分享的是第三种时,加密对象中只有用户id(帖子id和帖子分类为空)
                // 在网页上查看分享时,对与第三种可以选择帖子分类来筛选,选择的分类通过url参数privateTag传上来
                if (string.IsNullOrWhiteSpace(shareInfo.PrivateTag))
                {
                    shareInfo.PrivateTag = t;
                }

                if (shareInfo.UserId != Guid.Empty && CheckShareTime(shareInfo.Timestamp))
                {
                    if (shareInfo.PostId != Guid.Empty)
                    {
                        _logger.LogInformation("GetShareDataAsync: single post");

                        // 统计访问次数
                        if (c)
                        {
                            await UpdateUserShareAsync(shareInfo.UserId, shareInfo.PostId, null);
                        }

                        // get share data and return
                        var post = await _postQueries.GetSharedPostAsync(shareInfo.PostId, shareInfo.UserId);

                        posts = new PagedList <PostViewModel>(new List <PostViewModel> {
                            post
                        }, 1, new PagingParameters {
                            PageNumber = 1, PageSize = 1
                        });
                        return(Ok(PagedResponseWrapper.CreateOkPagedResponseWrapper(posts)));
                    }
                    else if (!string.IsNullOrWhiteSpace(shareInfo.PrivateTag))
                    {
                        _logger.LogInformation("GetShareDataAsync: tag posts");

                        // 统计访问次数
                        if (c)
                        {
                            await UpdateUserShareAsync(shareInfo.UserId, null, shareInfo.PrivateTag);
                        }

                        // get share data and return
                        posts = await _postQueries.GetSharedPostsAsync(shareInfo.PrivateTag, shareInfo.UserId, k, pagingParameters);

                        return(Ok(PagedResponseWrapper.CreateOkPagedResponseWrapper(posts)));
                    }
                    else
                    {
                        _logger.LogInformation("GetShareDataAsync: user posts");

                        // 统计访问次数
                        if (c)
                        {
                            await UpdateUserShareAsync(shareInfo.UserId, null, null);
                        }

                        // get share data and return
                        posts = await _postQueries.GetSharedPostsAsync(shareInfo.UserId, k, pagingParameters);

                        return(Ok(PagedResponseWrapper.CreateOkPagedResponseWrapper(posts)));
                    }
                }
            }

            return(new ObjectResult(ResponseWrapper.CreateErrorResponseWrapper((StatusCode)HttpStatusCode.BadRequest, "分享的帖子不存在或已过期")));
        }