public async Task <FriendshipStatus> FriendshipStatus(string id1, string id2)
        {
            UserDTO user1 = await GetUserById(id1);

            UserDTO user2 = await GetUserById(id2);

            FriendshipFilter FriendFilter = new FriendshipFilter {
                Account = user1, Account2 = user2
            };

            if ((GetQuery(FriendFilter).Execute()).Any())
            {
                return(ENUM.User.FriendshipStatus.Friend);
            }
            RequestFilter requestFilter = new RequestFilter {
                Sender = user1, Receiver = user2, Status = ENUM.Request.RequestStatus.Sended
            };

            if ((GetQuery(requestFilter).Execute()).Any())
            {
                return(ENUM.User.FriendshipStatus.Follower);
            }
            requestFilter = new RequestFilter {
                Sender = user2, Receiver = user1, Status = ENUM.Request.RequestStatus.Sended
            };
            if ((GetQuery(requestFilter).Execute()).Any())
            {
                return(ENUM.User.FriendshipStatus.SendRequest);
            }
            return(ENUM.User.FriendshipStatus.Unknown);
        }
        public async Task <bool> AreUsersIsFriends(UserDTO User1Id, UserDTO User2Id)
        {
            FriendshipFilter filter = new FriendshipFilter {
                Account = User1Id, Account2 = User2Id
            };

            return((GetQuery(filter).Execute()).Any());
        }
        private IQuery <FriendshipDTO> GetQuery(FriendshipFilter filter)
        {
            FriendListQuery query = new FriendListQuery((UnitOfWork)Database)
            {
                Filter = filter
            };

            query.ClearSortCriterias();
            return(query);
        }
        public async Task <List <UserDTO> > ListFriendsOfUser(UserDTO account, int page = 0)
        {
            FriendshipFilter filter = new FriendshipFilter {
                Account = account
            };

            IQuery <FriendshipDTO> query = GetQuery(filter);

            query.Skip = (page > 0 ? page - 1 : 0) * UserPageSize;
            query.Take = UserPageSize;


            FriendshipListDTO queryRes = new FriendshipListDTO
            {
                RequestedPage     = page,
                ResultCount       = query.GetTotalRowCount(),
                ResultFriendships = query.Execute(),
                Filter            = filter
            };

            List <UserDTO> retList = new List <UserDTO>();

            foreach (FriendshipDTO friendship in queryRes.ResultFriendships)
            {
                ClientProfile tmpUs = null;


                if (friendship.User1Id.Equals(account.Id))
                {
                    tmpUs = await Database.ClientManager.GetById(friendship.User2Id);
                }
                else if (friendship.User2Id.Equals(account.Id))
                {
                    tmpUs = await Database.ClientManager.GetById(friendship.User1Id);
                }

                retList.Add(new UserDTO
                {
                    Id       = tmpUs.Id,
                    Name     = tmpUs.Name,
                    Address  = tmpUs.Address,
                    Email    = tmpUs.ApplicationUser.Email,
                    UserName = tmpUs.ApplicationUser.UserName
                });
            }
            return(retList);
        }