public async ValueTask <IActionResult> UserPosts(string id, [FromBody] ReqVm postReq) { var user = await db.Users.FirstOrDefaultAsync(u => u.UserName == id); if (user == null || !ModelState.IsValid) { return(BadRequest("User not found")); } var currentUser = await db.Users.FirstOrDefaultAsync(u => u.UserName == User.FindFirstValue(ClaimTypes.NameIdentifier)); if (user.IsPrivate) { var hasAccess = currentUser?.FollowedFollows? .Any(f => f.Followed == user && f.Accepted) ?? false || User.IsInRole("Admin"); if (!hasAccess) { return(Forbid()); } } IEnumerable <Post> prePosts = user.Posts; prePosts = postReq.TowardOlds ? prePosts.OrderByDescending(p => p.Time) : prePosts.OrderBy(p => p.Time); if (postReq.LastGuttedId != null) { prePosts = prePosts.SkipWhile(p => p.Id != postReq.LastGuttedId).Skip(1); } prePosts = prePosts.Take(postReq.MaxCountToGet); var posts = prePosts.ConvertToVm(currentUser); return(Ok(posts)); }
public async ValueTask <IActionResult> Trends([FromBody] ReqVm postReq) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var currentUser = await db.Users.FirstOrDefaultAsync(u => u.UserName == User.FindFirstValue(ClaimTypes.NameIdentifier)); IEnumerable <Post> prePosts; prePosts = db.Posts.Where(p => p.Parent == null && (!p.Sender.IsPrivate || p.Sender.FollowerFollows.Any(f => f.Follower == currentUser && f.Accepted) ) ) .OrderByDescending(p => p.Likes.Count); prePosts = postReq.TowardOlds ? prePosts.OrderByDescending(p => p.Time) : prePosts.OrderBy(p => p.Time); if (postReq.LastGuttedId != null) { prePosts = prePosts.SkipWhile(p => p.Id != postReq.LastGuttedId).Skip(1); } prePosts = prePosts.Take(postReq.MaxCountToGet); var posts = prePosts.ConvertToVm(currentUser); return(Ok(posts)); }
public async ValueTask <IActionResult> View(long?id, [FromBody] ReqVm postReq) { if (!ModelState.IsValid) { if (postReq == null && id != null) { ModelState.Remove(""); } } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var currentUser = await db.Users.FirstOrDefaultAsync(u => u.UserName == User.FindFirstValue(ClaimTypes.NameIdentifier)); if (id != null) { var prePost = await db.Posts.FindAsync(id); if (prePost.Sender.IsPrivate) { var hasAccess = currentUser?.FollowedFollows? .Any(f => f.Followed == prePost.Sender && f.Accepted) ?? false || User.IsInRole("Admin"); if (!hasAccess) { return(Forbid()); } } return(Ok(prePost.ConvertToVm(currentUser))); } IEnumerable <Post> prePosts; prePosts = currentUser.FollowedFollows.Where(f => f.Accepted) .Select(f => f.Followed).SelectMany(u => u.Posts).Where(p => p.Parent == null); prePosts = postReq.TowardOlds ? prePosts.OrderByDescending(p => p.Time) : prePosts.OrderBy(p => p.Time); if (postReq.LastGuttedId != null) { prePosts = prePosts.SkipWhile(p => p.Id != postReq.LastGuttedId).Skip(1); } prePosts = prePosts.Take(postReq.MaxCountToGet); var posts = prePosts.ConvertToVm(currentUser); return(Ok(posts)); }