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)); }
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)); }
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)); }