public FriendshipAllFriendsPaginatedSpecification(FriendshipFilterDto friendshipFilter)
     : base(x => (x.ReceiverId == friendshipFilter.UserId || x.SenderId == friendshipFilter.UserId) &&
            x.StatusId == (int)FriendshipStatus.Accepted)
 {
     AddInclude($"{nameof(Domain.Entities.Friendship.Receiver)}");
     AddInclude($"{nameof(Domain.Entities.Friendship.Sender)}");
     ApplyPaging(friendshipFilter.Skip, friendshipFilter.Take, friendshipFilter.PageNumber);
 }
        public async Task ApplyWhereClause_EmptyFilter_ReturnsNull()
        {
            var mockManager           = new QueryMockManager();
            var mapperMock            = mockManager.ConfigureMapperMock <Friendship, FriendshipDto, FriendshipFilterDto>();
            var queryMock             = mockManager.ConfigureQueryMock <Friendship>();
            var friendshipQueryObject = new FriendshipQueryObject(mapperMock.Object, queryMock.Object);

            var filter = new FriendshipFilterDto();
            var temp   = await friendshipQueryObject.ExecuteQuery(filter);

            Assert.AreEqual(null, mockManager.CapturedPredicate);
        }
        private async Task <UserFriendsListViewModel> GetUserFriendsModel(UserDto user, int page)
        {
            var filter = new FriendshipFilterDto
            {
                PageSize            = FriendsPageSize,
                RequestedPageNumber = page
            };
            var friends = await UserFacade.GetFriendsOfUser(user.Id, filter);

            return(new UserFriendsListViewModel
            {
                Friends = await InitializeFriendsListViewModel(friends),
                Filter = friends.Filter
            });
        }
Esempio n. 4
0
        public async Task <FriendshipDto> GetFriendshipBetweenUsers(Guid userAId, Guid userBId)
        {
            var filter = new FriendshipFilterDto
            {
                UserA = userAId,
                UserB = userBId
            };

            using (UnitOfWorkProvider.Create())
            {
                var result = await friendshipService.ListFriendshipAsync(filter);

                return(result.Items.FirstOrDefault());
            }
        }
Esempio n. 5
0
        public async Task <QueryResultDto <FriendshipDto, FriendshipFilterDto> > PendingFriendshipRequests(Guid userId)
        {
            using (UnitOfWorkProvider.Create())
            {
                var filter = new FriendshipFilterDto
                {
                    UserA       = userId,
                    IsConfirmed = false
                };
                var friendships = await friendshipService.ListFriendshipAsync(filter);

                friendships.Items = friendships.Items.Where(friendship => friendship.RecipientId == userId);
                return(friendships);
            }
        }
Esempio n. 6
0
        public async Task <bool> CanSendFriendshipRequest(UserDto applicant, UserDto recipient)
        {
            using (UnitOfWorkProvider.Create())
            {
                var filter = new FriendshipFilterDto
                {
                    // We can swap those, doesn't really matter the order
                    UserA = applicant.Id,
                    UserB = recipient.Id
                };
                var allFriendships = await friendshipService.ListFriendshipAsync(filter);

                filter.IsConfirmed = false;
                var allFriendshipRequests = await friendshipService.ListFriendshipAsync(filter);

                return(allFriendships.TotalItemsCount == 0 && allFriendshipRequests.TotalItemsCount == 0);
            }
        }
Esempio n. 7
0
        public async Task <ActionResult> Index(int userId = 0)
        {
            var authUser = await BasicUserFacade.GetUserByNickNameAsync(User.Identity.Name);

            var filter = new FriendshipFilterDto()
            {
                UserId = authUser.Id
            };

            var friendsWithChat = await FriendsWithChatFacade.GetFriendsWithChatAsync(filter);

            return(View("Chat", new ChatModel
            {
                AuthenticatedUser = authUser,
                FriendWithChat = friendsWithChat.Items,
                Filter = filter
            }));
        }
Esempio n. 8
0
        public async Task <IEnumerable <FriendDto> > GetAllFriends(FriendshipFilterDto friendshipFilter)
        {
            friendshipFilter.UserId = _currentUserService.UserId;

            var friendshipSpec = new FriendshipAllFriendsPaginatedSpecification(friendshipFilter);

            var friendships = await _uow.Repository <Domain.Entities.Friendship>().FindAsyncWithPagination(friendshipSpec);

            _context.HttpContext.Response.AddPagination(friendships.CurrentPage, friendships.PageSize, friendships.TotalCount, friendships.TotalPages);

            var result = new List <FriendDto>();

            foreach (var friendship in friendships)
            {
                if ((int)_currentUserService.UserId == friendship.SenderId)
                {
                    result.Add(new FriendDto
                    {
                        Id        = friendship.ReceiverId,
                        Username  = friendship.Receiver.Username,
                        FirstName = friendship.Receiver.FirstName,
                        LastName  = friendship.Receiver.LastName,
                        Interests = friendship.Receiver.Interests
                    });
                }
                else
                {
                    result.Add(new FriendDto
                    {
                        Id        = friendship.SenderId,
                        Username  = friendship.Sender.Username,
                        FirstName = friendship.Sender.FirstName,
                        LastName  = friendship.Sender.LastName,
                        Interests = friendship.Sender.Interests
                    });
                }
            }

            await _photoService.IncludeMainPhoto(result, (int)EntityTypes.User);

            return(result);
        }
        public async Task ApplyWhereClause_FilterByUserBId_ReturnsCorrectPredicate()
        {
            Guid filteredUserId    = Guid.NewGuid();
            var  mockManager       = new QueryMockManager();
            var  expectedPredicate = new CompositePredicate(new List <IPredicate>
            {
                new SimplePredicate(nameof(Friendship.ApplicantId), ValueComparingOperator.Equal, filteredUserId),
                new SimplePredicate(nameof(Friendship.RecipientId), ValueComparingOperator.Equal, filteredUserId)
            }, LogicalOperator.OR);
            var mapperMock            = mockManager.ConfigureMapperMock <Friendship, FriendshipDto, FriendshipFilterDto>();
            var queryMock             = mockManager.ConfigureQueryMock <Friendship>();
            var friendshipQueryObject = new FriendshipQueryObject(mapperMock.Object, queryMock.Object);

            var filter = new FriendshipFilterDto {
                UserB = filteredUserId
            };
            var temp = await friendshipQueryObject.ExecuteQuery(filter);

            Assert.AreEqual(expectedPredicate, mockManager.CapturedPredicate);
        }
        private async Task <FriendListViewModel> GetFriendsModel(Guid userId, int page)
        {
            if (userId == Guid.Empty)
            {
                return(new FriendListViewModel
                {
                    Friends = new StaticPagedList <UserDto>(new List <UserDto>(), page, 0, 0)
                });
            }

            var filter = new FriendshipFilterDto()
            {
                IsConfirmed         = true,
                PageSize            = FriendsPageSize,
                RequestedPageNumber = page,
                UserA = userId
            };
            var friends = await UserFacade.GetFriendsOfUser(userId, filter);

            return(InitializeFriendListViewModel(friends));
        }
Esempio n. 11
0
        private IPredicate CreateCompositePredicateFromFilter(FriendshipFilterDto filter)
        {
            // Filter confirmed friendships or pending friend requests
            SimplePredicate    confirmedFriendshipsPredicate = new SimplePredicate(nameof(Friendship.IsConfirmed), ValueComparingOperator.Equal, filter.IsConfirmed);
            CompositePredicate result = new CompositePredicate(new List <IPredicate> {
                confirmedFriendshipsPredicate
            }, LogicalOperator.AND);

            if (filter.UserA == Guid.Empty)
            {
                result.Predicates.Add(CreatePredicateForOneUser(filter.UserB));
                return(result);
            }
            if (filter.UserB == Guid.Empty)
            {
                result.Predicates.Add(CreatePredicateForOneUser(filter.UserA));
                return(result);
            }

            // Both users must be in frienship structure, doesn't matter who is sender or recipient
            result.Predicates.Add(CreatePredicateForBothUsers(filter.UserA, filter.UserB));
            return(result);
        }
        protected override IQuery <Friendship> ApplyWhereClause(IQuery <Friendship> query, FriendshipFilterDto filter)
        {
            var wherePredicate = new CompositePredicate(new List <IPredicate>
            {
                new SimplePredicate(nameof(Friendship.User1Id), ValueComparingOperator.Equal, filter.UserId),
                new SimplePredicate(nameof(Friendship.User2Id), ValueComparingOperator.Equal, filter.UserId)
            }, LogicalOperator.OR);

            var compositePredicate = new CompositePredicate(new List <IPredicate>()
            {
                wherePredicate,
                new SimplePredicate(nameof(Friendship.IsAccepted), ValueComparingOperator.Equal, true)
            });

            wherePredicate = compositePredicate;

            return(filter.UserId.Equals(null)
                ? query
                : query.Where(wherePredicate));
        }
Esempio n. 13
0
        public async Task <QueryResultDto <FriendsWithChatDto, FriendshipFilterDto> > GetFriendsWithChatAsync(FriendshipFilterDto filter)
        {
            using (UnitOfWorkProvider.Create())
            {
                var friends = await _friendsWithChatService.GetFriendsAsync(filter);

                foreach (var friendship in friends.Items)
                {
                    friendship.Chat = await _messageService.GetMessagesByFriendshipIdAsync(friendship.Id);
                }

                return(friends);
            }
        }
Esempio n. 14
0
 protected override IQuery <Friendship> ApplyWhereClause(IQuery <Friendship> query, FriendshipFilterDto filter)
 {
     return(filter.UserA == Guid.Empty &&
            filter.UserB == Guid.Empty
         ? query
         : query.Where(CreateCompositePredicateFromFilter(filter)));
 }
Esempio n. 15
0
 public async Task <IActionResult> GetAllFriends([FromQuery] FriendshipFilterDto friendshipFilter)
 {
     return(Ok(await _friendshipService.GetAllFriends(friendshipFilter)));
 }
Esempio n. 16
0
 public async Task <QueryResultDto <UserDto, FriendshipFilterDto> > GetFriendsOfUser(Guid userId, FriendshipFilterDto filter)
 {
     filter.UserA       = userId;
     filter.IsConfirmed = true;
     using (UnitOfWorkProvider.Create())
     {
         return(await friendshipService.GetFriendsOfUserAsync(userId, filter));
     }
 }