Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }