public bool GetUserLike(int userId, int postId, int page, int pageSize, out List <SimpleUser> simpleUsers, out Pagination pagination) { try { DbService.ConnectDb(out _context); var _ = _context.Posts.FirstOrDefault(t => t.Id == postId && t.DeletedAt == null) ?? throw new ExceptionWithMessage("Post not found"); var users = (from pl in _context.PostLikes join user in _context.Users on pl.UserId equals user.Id where pl.DeletedAt == null && pl.PostId == postId select user).ToList(); var total = users.Count(); var skip = pageSize * (page - 1); var canPage = skip < total; List <User> resultUsers; if (canPage) { resultUsers = pageSize <= 0 ? users : users .Skip(skip) .Take(pageSize) .ToList(); } else { resultUsers = new List <User>(); } simpleUsers = new List <SimpleUser>(); foreach (var user in resultUsers) { var friendType = _friendService.CalculateIsFriend(userId, user.Id); simpleUsers.Add(user.ToSimpleUser(friendType)); } pagination = new Pagination(total, page, pageSize > 0 ? pageSize : total); } finally { DbService.DisconnectDb(ref _context); } return(true); }
public bool TryGetTourAllMembers(int myUserId, int tourId, int page, int pageSize, out List <SimpleTourMember> users, out Pagination pagination) { try { DbService.ConnectDb(out _context); var members = (from tm in _context.TourMembers join u in _context.Users on tm.UserId equals u.Id where (tm.TourId == tourId && tm.DeletedAt == null) select new { User = u, TourMember = tm, }); var total = members?.Count() ?? 0; var skip = pageSize * (page - 1); var canPage = skip < total; if (canPage) { members = pageSize <= 0 ? members : members .Skip(skip) .Take(pageSize); // Sort by AcceptedAt members = members.OrderByDescending(e => e.TourMember.AcceptedAt); users = members.AsEnumerable().Select(e => { var friendType = _friendService.CalculateIsFriend(myUserId, e.User.Id); return(new SimpleTourMember( e.User.Id, e.User.Name, e.User.Avatar, e.User.Job, friendType, e.TourMember.JoinAt, e.TourMember.AcceptedAt )); }).ToList(); } else { users = new List <SimpleTourMember>(); } pagination = new Pagination(total, page, pageSize); } finally { DbService.DisconnectDb(ref _context); } return(true); }
public bool TryGetTours(int userId, int page, int pageSize, string type, out List <SimpleTour> tours, out Pagination pagination) { tours = null; pagination = null; bool isSuccess; type = type?.ToLower(); try { DbService.ConnectDb(out _context); var toursDb = (from t in _context.Tours join ti in _context.TourInfos on t.TourInfoId equals ti.Id join tm in _context.TourMembers on t.Id equals tm.TourId into tourInfoMember from tim in tourInfoMember.DefaultIfEmpty() join host in _context.Users on t.CreateById equals host.Id let f = (from tourMember in _context.TourMembers join friend in (from fr in _context.Friends.Where(fr => fr.AcceptedAt != null && (fr.UserId == userId || fr.RequestedUserId == userId)) select new { Id = fr.UserId == userId ? fr.RequestedUserId : fr.UserId } ) on tourMember.UserId equals friend.Id join user in _context.Users on friend.Id equals user.Id select user ) where (type != null && type.Equals("owner") && host.Id == userId) || (type != null && type.Equals("member") && tim != null && tim.UserId == userId) || ((type == null || (!type.Equals("owner") && !type.Equals("member")) && (t.CreateById == userId || (tim != null && tim.UserId == userId)))) select new { t.Id, t.Name, t.StartDay, t.EndDay, t.Price, Host = host, Friends = f.ToList(), TourInfo = ti, tim.JoinAt, tim.AcceptedAt }).AsEnumerable()?.Distinct((a, b) => a.Id == b.Id).ToList(); // Sort by start date toursDb = toursDb.OrderByDescending(t => t.Id).ToList(); var total = toursDb.Count(); var skip = pageSize * (page - 1); pageSize = pageSize <= 0 ? total : pageSize; tours = toursDb .Skip(skip) .Take(pageSize) .Select((e) => { var totalMember = _context.TourMembers.Count(t => t.TourId == e.Id); var listFriend = e.Friends.Any() ? e.Friends.Select(u => u.ToSimpleUser(FriendType.Accepted)).ToList() : new List <SimpleUser>(); return(new SimpleTour( e.Id, e.Name, e.StartDay, e.EndDay, totalMember, e.Host.ToSimpleUser(_friendService.CalculateIsFriend(userId, e.Host.Id)), listFriend, e.Price, e.TourInfo, e.JoinAt, e.AcceptedAt)); }) .ToList(); pagination = new Pagination(total, page, pageSize); isSuccess = true; } finally { DbService.DisconnectDb(ref _context); } return(isSuccess); }