Пример #1
0
        public IHttpActionResult GetNewsFeed([FromUri] NewsFeedBindingModel bindingModel)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            if (bindingModel == null)
            {
                return(this.BadRequest("Invalid data."));
            }

            var currentUserId = this.UserIdProvider.GetUserId();
            var currentUser   = this.Data.Users.Find(currentUserId);
            var posts         = this.Data
                                .Posts
                                .All()
                                .Where(p => p.Author.Friends.Any(f => f.Id == currentUserId) ||
                                       p.WallOwner.Friends.Any(f => f.Id == currentUserId))
                                .OrderByDescending(p => p.PostedOn)
                                .Skip(bindingModel.StartPostNumber)
                                .Take(bindingModel.PostsCount)
                                .Select(PostViewModel.Create(currentUser));

            return(this.Ok(posts));
        }
Пример #2
0
        public IHttpActionResult GetNewsFeed([FromUri] NewsFeedBindingModel feedModel)
        {
            if (feedModel == null)
            {
                return(this.BadRequest("No Page Size specified."));
            }
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var me = GetCurrentUser();

            if (me == null)
            {
                return(this.BadRequest("Invalid user token! Please login again!"));
            }

            var postsFromToFriends = this.Data.Posts.AsQueryable()
                                     .Where(p => p.Author.Friends.Any(fr => fr.Id == me.Id) ||
                                            p.Owner.Friends.Any(fr => fr.Id == me.Id))
                                     .Select(PostViewModel.Create)
                                     .OrderByDescending(p => p.Date)
                                     .ToList();

            if (feedModel.StartPostId.HasValue)
            {
                postsFromToFriends = postsFromToFriends
                                     .SkipWhile(p => p.Id != feedModel.StartPostId).Skip(1).ToList();
            }

            var pagePosts = postsFromToFriends.Take(feedModel.PageSize).ToList();

            return(this.Ok(pagePosts));
        }
        public IHttpActionResult GetHomePage([FromUri] NewsFeedBindingModel model)
        {
            var loggedUserId = this.User.Identity.GetUserId();
            var loggedUser   = this.TwitterData.Users.Find(loggedUserId);

            if (loggedUser == null)
            {
                return(this.BadRequest("Invalid session token."));
            }

            if (model == null)
            {
                return(this.BadRequest());
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var candidateTweets = this.TwitterData.Tweets.All()
                                  .Where(p => p.Author.Followers.Any(fr => fr.Id == loggedUserId) ||
                                         p.WallOwner.Followers.Any(fr => fr.Id == loggedUserId))
                                  .Include(p => p.Author)
                                  .Include(p => p.WallOwner)
                                  .Include(p => p.Replies)
                                  .Include(p => p.Favorites)
                                  .OrderByDescending(p => p.PostedOn)
                                  .AsEnumerable();

            if (model.StartPostId.HasValue)
            {
                candidateTweets = candidateTweets
                                  .SkipWhile(t => t.Id != model.StartPostId)
                                  .Skip(1);
            }

            var homeTweets = candidateTweets
                             .Take(model.PageSize)
                             .AsQueryable()
                             .Select(t => TweetViewModel.CreateView(t, loggedUser))
                             .ToList();

            return(this.Ok(homeTweets));
        }
Пример #4
0
        public IHttpActionResult GetNewsFeed([FromUri] NewsFeedBindingModel feedModel)
        {
            var userId = this.User.Identity.GetUserId();

            if (userId == null)
            {
                return(this.BadRequest());
            }

            if (feedModel == null)
            {
                return(this.BadRequest("No page size specified."));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var user           = this.SocialNetworkData.Users.GetById(userId);
            var candidatePosts = this.SocialNetworkData.Posts.All()
                                 .Where(p => p.Author.Friends.Any(fr => fr.Id == userId) ||
                                        p.WallOwner.Friends.Any(fr => fr.Id == userId))
                                 .OrderByDescending(p => p.Date)
                                 .AsEnumerable();

            if (feedModel.StartPostId.HasValue)
            {
                candidatePosts = candidatePosts
                                 .SkipWhile(p => p.Id != feedModel.StartPostId)
                                 .Skip(1);
            }

            var pagePosts = candidatePosts
                            .Take(feedModel.PageSize)
                            .Select(p => PostViewModel.Create(p, user));

            if (!pagePosts.Any())
            {
                return(this.Ok(Enumerable.Empty <string>()));
            }

            return(this.Ok(pagePosts));
        }