コード例 #1
0
        public async Task <PagesList <Message> > GetMessagesForUser(MessageParams messageParams)
        {
            var messages = _context.Messages
                           .Include(u => u.Sender).ThenInclude(p => p.Photos)
                           .Include(u => u.Recipient).ThenInclude(p => p.Photos)
                           .AsQueryable();

            switch (messageParams.MessageContainer)
            {
            case "Inbox":
                messages = messages.Where(u => u.RecipientId == messageParams.UserId &&
                                          u.RecipientDeleted == false);
                break;

            case "Outbox":
                messages = messages.Where(u => u.SenderId == messageParams.UserId &&
                                          u.SenderDeleted == false);
                break;

            default:
                messages = messages.Where(u => u.RecipientId == messageParams.UserId &&
                                          u.RecipientDeleted == false && u.IsRead == false);
                break;
            }

            messages = messages.OrderByDescending(d => d.MessageSent);

            return(await PagesList <Message> .CreateAsync(messages, messageParams.PageNumber, messageParams.PageSize));
        }
コード例 #2
0
        public async Task <PagesList <LikeDTO> > GetUserLikes(LikeParams likeParams)
        {
            var users = _context.Users.OrderBy(u => u.UserName).AsQueryable();
            var likes = _context.Likes.AsQueryable();

            if (likeParams.Predicate == "liked")
            {
                likes = likes.Where(like => like.SourceUserId == likeParams.UserId);
                users = likes.Select(like => like.LikedUser);
            }

            if (likeParams.Predicate == "likedBy")
            {
                likes = likes.Where(like => like.LikedUserId == likeParams.UserId);
                users = likes.Select(like => like.SourceUser);
            }

            var userLikes = users.Select(user => new LikeDTO {
                Username = user.UserName,
                Age      = user.DateOfBirth.CalculateAge(),
                KnownAs  = user.KnownAs,
                PhotoUrl = user.Photos.FirstOrDefault(p => p.IsMain).Url,
                City     = user.City,
                Id       = user.Id
            });

            return(await PagesList <LikeDTO> .CreateAsync(userLikes, likeParams.PageNumber, likeParams.PageSize));
        }
コード例 #3
0
        public async Task <PagesList <User> > GetUsers(UserParams userParams)
        {
            var users = _context.Users.Include(p => p.Photos)
                        .OrderByDescending(u => u.LastActive).AsQueryable();

            users = users.Where(u => u.Id != userParams.UserId);

            users = users.Where(u => u.Gender == userParams.Gender);

            if (userParams.Likers)
            {
                var userLikers = await GetUserLikes(userParams.UserId, userParams.Likers);

                users = users.Where(u => userLikers.Contains(u.Id));
            }

            if (userParams.Likees)
            {
                var userLikees = await GetUserLikes(userParams.UserId, userParams.Likers);

                users = users.Where(u => userLikees.Contains(u.Id));
            }

            if (userParams.MinAge != 18 || userParams.MaxAge != 99)
            {
                var minDob = DateTime.Today.AddYears(-userParams.MaxAge - 1);
                var maxDob = DateTime.Today.AddYears(-userParams.MinAge);

                users = users.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob);
            }

            if (!string.IsNullOrEmpty(userParams.OrderBy))
            {
                switch (userParams.OrderBy)
                {
                case "created":
                    users = users.OrderByDescending(u => u.Created);
                    break;

                default:
                    users = users.OrderByDescending(u => u.LastActive);
                    break;
                }
            }

            return(await PagesList <User> .CreateAsync(users, userParams.PageNumber, userParams.PageSize));
        }
コード例 #4
0
        public async Task <PagesList <MessageDTO> > GetMessagesForUser(MessageParams messageParams)
        {
            var query = _context.Messages
                        .OrderByDescending(m => m.MessageSent)
                        .AsQueryable();

            query = messageParams.Container switch
            {
                "Inbox" => query.Where(u => u.Recipient.UserName == messageParams.Username &&
                                       u.RecipientDeleted == false),
                "Outbox" => query.Where(u => u.Sender.UserName == messageParams.Username &&
                                        u.SenderDeleted == false),
                _ => query.Where(u => u.Recipient.UserName == messageParams.Username &&
                                 u.RecipientDeleted == false && u.DateRead == null)
            };

            var messages = query.ProjectTo <MessageDTO>(_mapper.ConfigurationProvider);

            return(await PagesList <MessageDTO> .CreateAsync(messages, messageParams.PageNumber, messageParams.PageSize));
        }
コード例 #5
0
        public async Task <PagesList <MemberDTO> > GetMembersDtoAsync(UserParams userParams)
        {
            var query = _context.Users.AsQueryable();

            query = query.Where(u => u.UserName != userParams.CurrentUserName);

            query = query.Where(g => g.Gender == userParams.Gender);

            var MinDob = DateTime.Today.AddYears(-userParams.MaxAge).AddDays(-1);
            var MaxDob = DateTime.Today.AddYears(-userParams.MinAge);

            query = query.Where(u => u.DateOfBirth >= MinDob && u.DateOfBirth <= MaxDob);

            query = userParams.OrderBy switch
            {
                "created" => query.OrderByDescending(u => u.Created),
                _ => query.OrderByDescending(u => u.LastActive)
            };

            return(await PagesList <MemberDTO> .CreateAsync(query.ProjectTo <MemberDTO>
                                                            (_mapper.ConfigurationProvider).AsNoTracking(),
                                                            userParams.PageNumber, userParams.PageSize));
        }