Esempio n. 1
0
        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));
        }
Esempio n. 3
0
        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()));
        }