public IHttpActionResult GetWallPosts([FromUri] WallBindingModel bindingModel) { if (!this.ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } if (bindingModel == null) { return(this.BadRequest("Invalid data - username cannot be null")); } var wantedUser = this.Data .Users .All() .FirstOrDefault(u => u.UserName == bindingModel.Username); if (wantedUser == null) { return(this.NotFound()); } var currentUserId = this.UserIdProvider.GetUserId(); var currentUser = this.Data.Users.Find(currentUserId); var posts = this.Data .Posts .All() .Where(p => p.WallOwnerId == wantedUser.Id) .OrderByDescending(p => p.PostedOn) .Skip(bindingModel.StartPostNumber) .Take(bindingModel.PostsCount) .Select(PostViewModel.Create(currentUser)); return(this.Ok(posts)); }
public IHttpActionResult GetUserWallTweets(string username, [FromUri] WallBindingModel 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 wallOwner = this.TwitterData.Users.All() .FirstOrDefault(u => u.UserName == username); if (wallOwner == null) { return(this.NotFound()); } var candidatePosts = wallOwner.WallTweets .OrderByDescending(p => p.PostedOn) .AsQueryable(); if (model.StartPostId.HasValue) { candidatePosts = candidatePosts .AsQueryable() .SkipWhile(p => p.Id != model.StartPostId) .Skip(1) .AsQueryable(); } var pagePosts = candidatePosts .Take(model.PageSize) .Select(t => TweetViewModel.CreateView(t, loggedUser)); return(this.Ok(pagePosts)); }
public async Task <HttpResponseMessage> GetWall([FromUri] string username, [FromUri] WallBindingModel model) { if (model == null) { return(await this.BadRequest("Missing pagination parameters.").ExecuteAsync(new CancellationToken())); } if (!this.ModelState.IsValid) { return(await this.BadRequest(this.ModelState).ExecuteAsync(new CancellationToken())); } var currentUserId = User.Identity.GetUserId(); var currentUser = this.Data.Users.FirstOrDefault(x => x.Id == currentUserId); if (currentUser == null) { return(await this.BadRequest("Invalid user token! Please login again!") .ExecuteAsync(new CancellationToken())); } var searchedUser = Data.Users.FirstOrDefault(u => u.UserName.Equals(username)); if (searchedUser == null) { return(await this.NotFound().ExecuteAsync(new CancellationToken())); } //if (!currentUser.Friends.Contains(searchedUser)) //{ // return this.BadRequest("you can not retrieve non friend data"); //} var posts = searchedUser.Posts .OrderByDescending(p => p.PostedOn) .AsQueryable(); if (model.StartPostId.HasValue) { posts = posts .SkipWhile(p => p.Id != (int)model.StartPostId) .Skip(1) .AsQueryable(); } var postsPreview = posts .Take(model.PageSize) .Select(post => new PostViewModel() { Id = post.Id, AuthorId = post.Author.Id, AuthorUsername = post.Author.UserName, AuthorProfileImage = post.Author.ProfilePicture, WallOwnerId = post.Owner.Id, PostContent = post.Content, Date = post.PostedOn, LikesCount = post.Likes.Count, TotalCommentsCount = post.Comments.Count, Comments = post.Comments .OrderByDescending(c => c.PostedOn) .AsQueryable() .Select(CommentViewModel.Create).ToList() }); return(await this.Ok(postsPreview).ExecuteAsync(new CancellationToken())); }