public Task <ActionResult <IEnumerable <PostViewModel> > > GetPostsAsync([FromQuery] PostsPageInputModel inputModel)
        => ExecuteAsync <IEnumerable <PostViewModel> >(async() =>
        {
            var userId = GetUserId();
            var posts  = await _postsService.GetNearbyPostsAsync(userId, inputModel);

            if (!posts.Any())
            {
                return(NoContent());
            }

            return(Ok(posts));
        });
Example #2
0
        public async Task <IEnumerable <PostViewModel> > GetNearbyPostsAsync(Guid userId, PostsPageInputModel inputModel)
        {
            if (inputModel == null)
            {
                throw new ArgumentNullException(nameof(inputModel));
            }

            var skip      = inputModel.Skip ?? PaginationDefaults.DefaultSkip;
            var take      = inputModel.Take ?? PaginationDefaults.DefaultTake;
            var latitude  = inputModel.Latitude;
            var longitude = inputModel.Longitude;

            // TODO por algum motivo o get page nao ta funcionando direito
            // var posts = await _postsRepository
            //     .GetPageAsync(
            //         p =>
            //             p.Latitude < latitude + (latitude * 0.0005)
            //             && p.Latitude > latitude - (latitude * 0.0005)
            //             && p.Longitude < longitude + (longitude * 0.0005)
            //             && p.Longitude > longitude - (longitude * 0.0005),
            //         p => p.Rating,
            //         p => p
            //             .Include(e => e.User)
            //             .Include(e => e.Upvotes)
            //             .Include(e => e.Downvotes)
            //             .Include(e => e.SavedBy)
            //             .Include(e => e.Reports),
            //         skip,
            //         take);

            var posts = (await _postsRepository.GetQueryableAsync())
                        .Where(p =>
                               p.Latitude < latitude + (latitude * ((latitude < 0) ? -0.0005 : 0.0005)) &&
                               p.Latitude > latitude - (latitude * ((latitude < 0) ? -0.0005 : 0.0005)) &&
                               p.Longitude < longitude + (longitude * ((longitude < 0) ? -0.0005 : 0.0005)) &&
                               p.Longitude > longitude - (longitude * ((longitude < 0) ? -0.0005 : 0.0005)))
                        .OrderBy(p => p.Rating)
                        .Include(e => e.User)
                        .Include(e => e.Upvotes)
                        .Include(e => e.Downvotes)
                        .Include(e => e.SavedBy)
                        .Include(e => e.Reports)
                        .Skip(skip)
                        .Take(take)
                        .AsEnumerable();

            var viewModels = new List <PostViewModel>();

            foreach (var post in posts)
            {
                var viewModel = (PostViewModel)post;
                viewModel.Upvoted   = post.Upvotes.Any(u => u.UserId == userId);
                viewModel.Downvoted = post.Downvotes.Any(d => d.UserId == userId);
                viewModel.Saved     = post.SavedBy.Any(s => s.UserId == userId);
                viewModel.Reported  = post.Upvotes.Any(r => r.UserId == userId);
                viewModels.Add(viewModel);
            }

            return(viewModels);
        }