public async Task <PaginatedResponseExtended <IEnumerable <ViewerDetailResponse>, int> > GetProfileViewDetail(PaginatedRequest <GeneralKvPair <SystemProfileViewType, int> > request, SystemSession session)
        {
            var serviceRequest = new ProfileView
            {
                UserId    = request.UserId,
                ViewType  = (byte)request.Data.Id,
                TypeId    = request.Data.Value,
                PageIndex = request.PageIndex,
                PageSize  = request.PageSize
            };

            var response = await Task.Factory.StartNew(() => Client.UserService.profileViewDetail(serviceRequest, session.GetSession())).ConfigureAwait(false);

            var data = response.ProfileViews.Select(x => new ViewerDetailResponse
            {
                UserId           = x.UserId,
                UserTypeId       = (SystemUserType)x.UserTypeId,
                UserName         = x.Username,
                FirstName        = x.FirstName,
                LastName         = x.LastName,
                Image            = x.Picture,
                FriendshipStatus = (SystemFriendshipStatus)x.IsConnected,
                Observed         = x.Observed,
                Title            = x.Title,
                ViewedDate       = Convert.ToDateTime(x.ViewDate)
            });
            var result = new PaginatedResponseExtended <IEnumerable <ViewerDetailResponse>, int>
            {
                Page        = data,
                HasNextPage = response.HasNextPage,
                Information = response.ViewCount
            };

            return(result);
        }
        public async Task<PaginatedResponseExtended<IEnumerable<ViewSummaryResponse>, int>> GetProfileViewSummary(PaginatedRequest<int> request, SystemSession session)
        {
            var serviceRequest = new ProfileView
            {
                UserId = request.UserId,
                ViewType = request.Data,
                PageIndex = request.PageIndex,
                PageSize = request.PageSize
            };

            var response = await Task.Factory.StartNew(() => Client.UserService.profileViewSummary(serviceRequest, session.GetSession())).ConfigureAwait(false);
            var data = response.ProfileViews.Select(x => new ViewSummaryResponse
            {
                TypeId = x.TypeId,
                Name = x.FirstName,
                ViewCount = x.ViewersCount,
                NewViewCount = x.NewViews,
                LastViewed = Convert.ToDateTime(x.ViewDate)
            });
            var result = new PaginatedResponseExtended<IEnumerable<ViewSummaryResponse>, int>
            {
                Page = data,
                HasNextPage = response.HasNextPage,
                Information = response.ViewCount
            };
            return result;
        }
        public async Task <PaginatedResponseExtended <IEnumerable <ViewSummaryResponse>, int> > GetProfileViewSummary(PaginatedRequest <int> request, SystemSession session)
        {
            var serviceRequest = new ProfileView
            {
                UserId    = request.UserId,
                ViewType  = request.Data,
                PageIndex = request.PageIndex,
                PageSize  = request.PageSize
            };

            var response = await Task.Factory.StartNew(() => Client.UserService.profileViewSummary(serviceRequest, session.GetSession())).ConfigureAwait(false);

            var data = response.ProfileViews.Select(x => new ViewSummaryResponse
            {
                TypeId       = x.TypeId,
                Name         = x.FirstName,
                ViewCount    = x.ViewersCount,
                NewViewCount = x.NewViews,
                LastViewed   = Convert.ToDateTime(x.ViewDate)
            });
            var result = new PaginatedResponseExtended <IEnumerable <ViewSummaryResponse>, int>
            {
                Page        = data,
                HasNextPage = response.HasNextPage,
                Information = response.ViewCount
            };

            return(result);
        }
        public async Task<PaginatedResponseExtended<IEnumerable<UserInformationBaseExtendedResponse>, int>> GetMutualFriends(PaginatedRequest<string> request, SystemSession session)
        {
            var serviceRequest = new MutualFriend
            {
                UserId = session.UserId,
                TargetType = "F",
                TargetUser = request.Data,
                PageIndex = request.PageIndex,
                PageSize = request.PageSize
            };

            var data = await Task.Factory.StartNew(() => Client.UserService.getMutualFriends(serviceRequest, session.GetSession())).ConfigureAwait(false);
            var result = new PaginatedResponseExtended<IEnumerable<UserInformationBaseExtendedResponse>, int>
            {
                Page = data.MutualFriends.Select(x => new UserInformationBaseExtendedResponse
                {
                    UserId = x.UserId,
                    UserName = x.UserName,
                    UserTypeId = (SystemUserType)x.UserTypeId,
                    FirstName = x.FirstName,
                    LastName = x.LastName,
                    Image = x.Picture,
                    Title = x.Title
                }),
                HasNextPage = data.HasNextPage,
                Information = data.Count
            };

            return result;
        }
        public async Task <PaginatedResponseExtended <IEnumerable <UserInformationBaseExtendedResponse>, int> > GetMutualFriends(PaginatedRequest <string> request, SystemSession session)
        {
            var serviceRequest = new MutualFriend
            {
                UserId     = session.UserId,
                TargetType = "F",
                TargetUser = request.Data,
                PageIndex  = request.PageIndex,
                PageSize   = request.PageSize
            };

            var data = await Task.Factory.StartNew(() => Client.UserService.getMutualFriends(serviceRequest, session.GetSession())).ConfigureAwait(false);

            var result = new PaginatedResponseExtended <IEnumerable <UserInformationBaseExtendedResponse>, int>
            {
                Page = data.MutualFriends.Select(x => new UserInformationBaseExtendedResponse
                {
                    UserId     = x.UserId,
                    UserName   = x.UserName,
                    UserTypeId = (SystemUserType)x.UserTypeId,
                    FirstName  = x.FirstName,
                    LastName   = x.LastName,
                    Image      = x.Picture,
                    Title      = x.Title
                }),
                HasNextPage = data.HasNextPage,
                Information = data.Count
            };

            return(result);
        }
        public async Task <PaginatedResponseExtended <IEnumerable <ViewerDetailResponse>, int> > GetProfileViewDetail(PaginatedRequest <GeneralKvPair <SystemProfileViewType, int> > request)
        {
            var hasNextPage = new ObjectParameter("HASNEXTPAGE", typeof(bool));
            var totalViews  = new ObjectParameter("TOTALVIEWS", typeof(int));
            var response    = await Task.Factory.StartNew(() => Context.PROC_PROFILE_VIEW_DETAIL(request.UserId, (byte?)request.Data.Id, request.Data.Value, request.PageIndex, request.PageSize, hasNextPage, totalViews).ToList()).ConfigureAwait(false);

            var data = response.Select(x => new ViewerDetailResponse
            {
                UserId           = x.USERID,
                UserTypeId       = (SystemUserType)x.USERTYPEID,
                UserName         = x.USERNAME,
                FirstName        = x.FIRSTNAME,
                LastName         = x.LASTNAME,
                Image            = x.PICTURE,
                FriendshipStatus = (SystemFriendshipStatus)x.ISCONNECTED,
                Observed         = x.OBSERVED,
                Title            = x.TITLE,
                ViewedDate       = x.VIEWEDDATE
            });
            var result = new PaginatedResponseExtended <IEnumerable <ViewerDetailResponse>, int>
            {
                Page        = data,
                HasNextPage = Convert.ToBoolean(hasNextPage.Value),
                Information = Convert.ToInt32(totalViews.Value)
            };

            return(result);
        }
        public async Task <PaginatedResponseExtended <IEnumerable <UserInformationBaseExtendedResponse>, int> > MutualFriends(PaginatedRequest <string> request)
        {
            var hasNextPage      = new ObjectParameter("HASNEXTPAGE", typeof(bool));
            var totalFriendCount = new ObjectParameter("TOTALRELATEDFRIENDS", typeof(int));
            var data             = await Task.Factory.StartNew(() => Context.PROC_MUTUAL_FRIENDS(request.UserId, "F", request.Data, request.PageIndex, request.PageSize, hasNextPage, totalFriendCount).ToList()).ConfigureAwait(false);

            var result = new PaginatedResponseExtended <IEnumerable <UserInformationBaseExtendedResponse>, int>
            {
                Page = data.Select(x => new UserInformationBaseExtendedResponse
                {
                    UserId     = x.UserId,
                    UserName   = x.UserName,
                    UserTypeId = (SystemUserType)x.UserTypeID,
                    FirstName  = x.FirstName,
                    LastName   = x.LastName,
                    Image      = x.Picture,
                    Title      = x.Title
                }),
                HasNextPage = Convert.ToBoolean(hasNextPage.Value),
                Information = Convert.ToInt32(totalFriendCount.Value)
            };

            return(result);
        }
        public async Task<PaginatedResponseExtended<IEnumerable<ViewerDetailResponse>, int>> GetProfileViewDetail(PaginatedRequest<GeneralKvPair<SystemProfileViewType, int>> request, SystemSession session)
        {
            var serviceRequest = new ProfileView
            {
                UserId = request.UserId,
                ViewType = (byte)request.Data.Id,
                TypeId = request.Data.Value,
                PageIndex = request.PageIndex,
                PageSize = request.PageSize
            };

            var response = await Task.Factory.StartNew(() => Client.UserService.profileViewDetail(serviceRequest, session.GetSession())).ConfigureAwait(false);
            var data = response.ProfileViews.Select(x => new ViewerDetailResponse
            {
                UserId = x.UserId,
                UserTypeId = (SystemUserType)x.UserTypeId,
                UserName = x.Username,
                FirstName = x.FirstName,
                LastName = x.LastName,
                Image = x.Picture,
                FriendshipStatus = (SystemFriendshipStatus)x.IsConnected,
                Observed = x.Observed,
                Title = x.Title,
                ViewedDate = Convert.ToDateTime(x.ViewDate)
            });
            var result = new PaginatedResponseExtended<IEnumerable<ViewerDetailResponse>, int>
            {
                Page = data,
                HasNextPage = response.HasNextPage,
                Information = response.ViewCount
            };
            return result;
        }