public async Task <IActionResult> GetUserSouls([FromQuery] SoulParams soulParams) { if (soulParams.UserId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)) { return(Unauthorized()); } var user = await _repo.GetUser(soulParams.UserId); if (user == null) { return(Unauthorized()); } var souls = await _repo.GetUserSouls(soulParams); var userSoulsToReturn = _mapper.Map <IEnumerable <UserForListDto> >(souls); // Response.AddPagination(souls.CurrentPage, souls.PageSize, souls.TotalCount, souls.TotalPages); return(Ok(userSoulsToReturn)); }
public async Task <List <User> > GetUserSouls(SoulParams soulParams) { var likees = await GetUserLikes(soulParams.UserId, false); var userSouls = _context.Likes .Where(l => likees.Contains(l.LikerId) && l.LikeeId == soulParams.UserId) .Include(p => p.Liker.Photos) .Select(u => u.Liker); var lastMessages = new List <Message>(); foreach (var soul in userSouls) { var message = await GetLastMessage(soulParams.UserId, soul.Id); if (message == null) { continue; } if (lastMessages.Count != 0) { bool inserted = false; for (int i = 0; i < lastMessages.Count; i++) { if (lastMessages[i].SentDate < message.SentDate) { lastMessages.Insert(i, message); inserted = true; break; } } if (!inserted) { lastMessages.Add(message); } } else { lastMessages.Add(message); } } var orderedSouls = new List <User>(); for (int i = 0; i < lastMessages.Count; i++) { int senderId = lastMessages[i].SenderId; int recipientId = lastMessages[i].RecipientId; var user = userSouls.Where(i => i.Id == senderId || i.Id == recipientId).Select(i => i).First(); orderedSouls.Add(user); } foreach (var soul in userSouls) { bool exist = false; foreach (var orderedSoul in orderedSouls) { if (orderedSoul.Id == soul.Id) { exist = true; break; } } if (!exist) { orderedSouls.Add(soul); } } return(orderedSouls); }