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