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