From a7cef94a7a3bffb5514de3c5f7bc5317e84a7c67 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sat, 2 Aug 2025 15:14:38 +0330 Subject: [PATCH] add support for Query Follower\Following(s) ... --- Constants/XApiAccountEndpoint.cs | 16 +- Interfaces/IXIdentityProvider.cs | 20 +- Partial/XIdentityProvider+Friendship.cs | 575 ++++++++++++++---------- 3 files changed, 364 insertions(+), 247 deletions(-) diff --git a/Constants/XApiAccountEndpoint.cs b/Constants/XApiAccountEndpoint.cs index 006aa44..b5084ad 100644 --- a/Constants/XApiAccountEndpoint.cs +++ b/Constants/XApiAccountEndpoint.cs @@ -144,6 +144,9 @@ namespace xIdentityService.Constants [StringValue("Account/Friendship/{destUser}/RejectRequest")] RejectRequest, + [StringValue("Account/Friendship/{destUser}/FriendshipInfo")] + FriendshipInfo, + [StringValue("Account/Friendship/{destUser}/IsFollower")] IsFollower, @@ -159,6 +162,12 @@ namespace xIdentityService.Constants [StringValue("Account/Friendship/AllFollowers")] AllFollowers, + [StringValue("Account/Friendship/FollowersList")] + FollowersList, + + [StringValue("Account/Friendship/QueryFollowers")] + QueryFollowers, + [StringValue("Account/Friendship/{destUser}/IsFollowing")] IsFollowing, @@ -177,11 +186,8 @@ namespace xIdentityService.Constants [StringValue("Account/Friendship/FollowingsList")] FollowingsList, - [StringValue("Account/Friendship/FollowersList")] - FollowersList, - - [StringValue("Account/Friendship/{destUser}/FriendshipInfo")] - FriendshipInfo, + [StringValue("Account/Friendship/QueryFollowings")] + QueryFollowings, #endregion // diff --git a/Interfaces/IXIdentityProvider.cs b/Interfaces/IXIdentityProvider.cs index ffceec9..376db22 100644 --- a/Interfaces/IXIdentityProvider.cs +++ b/Interfaces/IXIdentityProvider.cs @@ -217,6 +217,11 @@ namespace xIdentityService.Interfaces string destUser ); + Task GetFriendshipInfo( + XTokenResponse tokens, + string destUser + ); + Task IsFollower( XTokenResponse tokens, string destUser @@ -236,6 +241,13 @@ namespace xIdentityService.Interfaces Task> GetAllFollowers(XTokenResponse tokens); + Task> GetFollowingList(XTokenResponse tokens); + + Task> QueryFollowers( + XQuery query, + XTokenResponse tokens + ); + Task IsFollowing( XTokenResponse tokens, string destUser @@ -255,13 +267,11 @@ namespace xIdentityService.Interfaces Task> GetAllFollowings(XTokenResponse tokens); - Task> GetFollowingList(XTokenResponse tokens); - Task> GetFollowersList(XTokenResponse tokens); - Task GetFriendshipInfo( - XTokenResponse tokens, - string destUser + Task> QueryFollowings( + XQuery query, + XTokenResponse tokens ); #endregion diff --git a/Partial/XIdentityProvider+Friendship.cs b/Partial/XIdentityProvider+Friendship.cs index 9a0ddc0..5e8cab4 100644 --- a/Partial/XIdentityProvider+Friendship.cs +++ b/Partial/XIdentityProvider+Friendship.cs @@ -2,14 +2,18 @@ using System.Collections.Generic; using System.Threading.Tasks; using xCommons.Extensions; using xHttpService.Constants; +using xHttpService.Extensions; using xIdentityModels.Constants; using xIdentityModels.Dtos; using xIdentityModels.Models; using xIdentityModels.Navigations; using xIdentityService.Constants; +using xModels.Dtos; -namespace xIdentityService.Providers { - public partial class XIdentityProvider { +namespace xIdentityService.Providers +{ + public partial class XIdentityProvider + { // #region Friendship ... /// @@ -18,33 +22,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollowing - public async Task Follow ( + public async Task Follow( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.Follow, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -58,33 +63,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// a boolean value - public async Task Cancel ( + public async Task Cancel( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.Cancel, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -98,33 +104,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// - public async Task UnFollowFollower ( + public async Task UnFollowFollower( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.UnFollowFollower, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -137,33 +144,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// - public async Task UnFollowFollowing ( + public async Task UnFollowFollowing( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.UnFollowFollowing, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -176,33 +184,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollowing - public async Task Block ( + public async Task Block( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.Block, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -216,33 +225,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollowing - public async Task UnBlock ( + public async Task UnBlock( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.UnBlock, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -256,33 +266,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollower - public async Task AcceptRequest ( + public async Task AcceptRequest( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.AcceptRequest, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -296,33 +307,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollower - public async Task RejectRequest ( + public async Task RejectRequest( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.RejectRequest, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.POST @@ -330,39 +342,81 @@ namespace xIdentityService.Providers { return response; } + /// + /// Get Friendship Info Model between Specific User and Current User + /// + /// Authentication Tokens + /// a user identifier which represent destination user + /// an instance of XFriendshipInfoDto + public async Task GetFriendshipInfo( + XTokenResponse tokens, + string destUser + ) + { + // + // Validate Args ... + await validationProvider + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( + destUser, + tokens.AccessToken + ) + .ValidateGroupAsync(); + + // + var client = GetRestClient(tokens); + + // + var request = GetRestRequet( + XApiAccountEndpoint.FriendshipInfo, + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + } + ); + + // + var response = await RunRestRequest( + client, + request, + XHttpMethod.GET + ); + return response; + } + /// /// Check a User IsFollower of Requested User /// /// Authentication Tokens /// a user identifier which represent destination user /// a boolean value - public async Task IsFollower ( + public async Task IsFollower( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.IsFollower, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.GET @@ -376,33 +430,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollower - public async Task GetFollower ( + public async Task GetFollower( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.Follower, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.GET @@ -416,33 +471,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipState - public async Task GetFollowerState ( + public async Task GetFollowerState( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.FollowerState, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.GET @@ -455,25 +511,26 @@ namespace xIdentityService.Providers { /// /// Authentication Tokens /// a collection of XFriendshipFollower - public async Task> GetFollowers ( + public async Task> GetFollowers( XTokenResponse tokens - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty (tokens.AccessToken) - .ValidateGroupAsync (); + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet (XApiAccountEndpoint.Followers); + var request = GetRestRequet(XApiAccountEndpoint.Followers); // - var response = await RunRestRequest> ( + var response = await RunRestRequest>( client, request, XHttpMethod.GET @@ -487,25 +544,96 @@ namespace xIdentityService.Providers { /// /// Authentication Tokens /// a collection of XFriendshipFollower - public async Task> GetAllFollowers ( + public async Task> GetAllFollowers( XTokenResponse tokens - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty (tokens.AccessToken) - .ValidateGroupAsync (); + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet (XApiAccountEndpoint.AllFollowers); + var request = GetRestRequet(XApiAccountEndpoint.AllFollowers); // - var response = await RunRestRequest> ( + var response = await RunRestRequest>( + client, + request, + XHttpMethod.GET + ); + return response; + } + + /// + /// Return Followers UserName's List of Current User + /// + /// Authentication Tokens + /// a collection of UserNames + public async Task> GetFollowersList( + XTokenResponse tokens + ) + { + // + // Validate Args ... + await validationProvider + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); + + // + var client = GetRestClient(tokens); + + // + var request = GetRestRequet(XApiAccountEndpoint.FollowersList); + + // + var response = await RunRestRequest>( + client, + request, + XHttpMethod.GET + ); + return response; + } + + /// + /// Retrieve All User's Followers based on Query Model ... + /// + /// Query Model Descriptor + /// Requester User's Descriptor + /// + public async Task> QueryFollowers( + XQuery query, + XTokenResponse tokens + ) + { + // + // Validate Args ... + await validationProvider + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); + + // + var client = GetRestClient(tokens); + + // + var request = GetRestRequet(XApiAccountEndpoint.QueryFollowers); + + // + // Attach XQuery to Request ... + request = request.AttachXQuery(query); + + // + var response = await RunRestRequest>( client, request, XHttpMethod.GET @@ -519,33 +647,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// a boolean value - public async Task IsFollowing ( + public async Task IsFollowing( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.IsFollowing, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.GET @@ -559,33 +688,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipFollowing - public async Task GetFollowing ( + public async Task GetFollowing( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.Following, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.GET @@ -600,33 +730,34 @@ namespace xIdentityService.Providers { /// Authentication Tokens /// a user identifier which represent destination user /// an instance of XFriendshipState - public async Task GetFollowingState ( + public async Task GetFollowingState( XTokenResponse tokens, string destUser - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty( destUser, tokens.AccessToken ) - .ValidateGroupAsync (); + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet ( + var request = GetRestRequet( XApiAccountEndpoint.FollowingState, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } + @params: new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } } ); // - var response = await RunRestRequest ( + var response = await RunRestRequest( client, request, XHttpMethod.GET @@ -639,25 +770,26 @@ namespace xIdentityService.Providers { /// /// Authentication Tokens /// a collection of XFriendshipFollowing - public async Task> GetFollowings ( + public async Task> GetFollowings( XTokenResponse tokens - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty (tokens.AccessToken) - .ValidateGroupAsync (); + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet (XApiAccountEndpoint.Followings); + var request = GetRestRequet(XApiAccountEndpoint.Followings); // - var response = await RunRestRequest> ( + var response = await RunRestRequest>( client, request, XHttpMethod.GET @@ -671,25 +803,26 @@ namespace xIdentityService.Providers { /// /// Authentication Tokens /// a collection of XFriendshipFollowing - public async Task> GetAllFollowings ( + public async Task> GetAllFollowings( XTokenResponse tokens - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty (tokens.AccessToken) - .ValidateGroupAsync (); + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet (XApiAccountEndpoint.AllFollowings); + var request = GetRestRequet(XApiAccountEndpoint.AllFollowings); // - var response = await RunRestRequest> ( + var response = await RunRestRequest>( client, request, XHttpMethod.GET @@ -702,25 +835,26 @@ namespace xIdentityService.Providers { /// /// Authentication Tokens /// a collection of UserNames - public async Task> GetFollowingList ( + public async Task> GetFollowingList( XTokenResponse tokens - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty (tokens.AccessToken) - .ValidateGroupAsync (); + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet (XApiAccountEndpoint.FollowingsList); + var request = GetRestRequet(XApiAccountEndpoint.FollowingsList); // - var response = await RunRestRequest> ( + var response = await RunRestRequest>( client, request, XHttpMethod.GET @@ -729,69 +863,36 @@ namespace xIdentityService.Providers { } /// - /// Return Followers UserName's List of Current User + /// Retrieve All User's Followings based on Query Model ... /// - /// Authentication Tokens - /// a collection of UserNames - public async Task> GetFollowersList ( + /// Query Model Descriptor + /// Requester User's Descriptor + /// + public async Task> QueryFollowings( + XQuery query, XTokenResponse tokens - ) { + ) + { // // Validate Args ... await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty (tokens.AccessToken) - .ValidateGroupAsync (); + .GroupValidationBuilder() + .AddNotNull(tokens) + .AddNotEmpty(tokens.AccessToken) + .ValidateGroupAsync(); // - var client = GetRestClient (tokens); + var client = GetRestClient(tokens); // - var request = GetRestRequet (XApiAccountEndpoint.FollowersList); + var request = GetRestRequet(XApiAccountEndpoint.QueryFollowings); // - var response = await RunRestRequest> ( - client, - request, - XHttpMethod.GET - ); - return response; - } - - /// - /// Get Friendship Info Model between Specific User and Current User - /// - /// Authentication Tokens - /// a user identifier which represent destination user - /// an instance of XFriendshipInfoDto - public async Task GetFriendshipInfo ( - XTokenResponse tokens, - string destUser - ) { - // - // Validate Args ... - await validationProvider - .GroupValidationBuilder () - .AddNotNull (tokens) - .AddNotEmpty ( - destUser, - tokens.AccessToken - ) - .ValidateGroupAsync (); + // Attach XQuery to Request ... + request = request.AttachXQuery(query); // - var client = GetRestClient (tokens); - - // - var request = GetRestRequet ( - XApiAccountEndpoint.FriendshipInfo, - @params : new Dictionary { { XParam.XDestUser.GetStringValue (), destUser } - } - ); - - // - var response = await RunRestRequest ( + var response = await RunRestRequest>( client, request, XHttpMethod.GET