Files
xIdentityService/Partial/XIdentityProvider+Friendship.cs
2025-08-12 14:57:03 +03:30

912 lines
28 KiB
C#

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
{
//
#region Friendship ...
/// <summary>
/// Follow a User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollowing</see></returns>
public async Task<XFriendshipFollowing> Follow(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.Follow,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollowing>(
client,
request,
XHttpMethod.POST
);
return response;
}
/// <summary>
/// Cancel Following Request
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>a boolean value</returns>
public async Task<bool> Cancel(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.Cancel,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<bool>(
client,
request,
XHttpMethod.POST
);
return response;
}
/// <summary>
/// Unfollow a Follower
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns></returns>
public async Task UnFollowFollower(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.UnFollowFollower,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<object>(
client,
request,
XHttpMethod.POST
);
}
/// <summary>
/// Unfollow Following
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns></returns>
public async Task UnFollowFollowing(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.UnFollowFollowing,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<object>(
client,
request,
XHttpMethod.POST
);
}
/// <summary>
/// Block a Follower
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollowing</see></returns>
public async Task<XFriendshipFollowing> Block(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.Block,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollowing>(
client,
request,
XHttpMethod.POST
);
return response;
}
/// <summary>
/// Unblock a Blocked User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollowing</see></returns>
public async Task<XFriendshipFollowing> UnBlock(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.UnBlock,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollowing>(
client,
request,
XHttpMethod.POST
);
return response;
}
/// <summary>
/// Accept a Following Request
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollower</see></returns>
public async Task<XFriendshipFollower> AcceptRequest(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.AcceptRequest,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollower>(
client,
request,
XHttpMethod.POST
);
return response;
}
/// <summary>
/// Reject a Following Request
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollower</see></returns>
public async Task<XFriendshipFollower> RejectRequest(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.RejectRequest,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollower>(
client,
request,
XHttpMethod.POST
);
return response;
}
/// <summary>
/// Get Friendship Info Model between Specific User and Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipInfoDto</see></returns>
public async Task<XFriendshipInfoDto> 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<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipInfoDto>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Check a User IsFollower of Requested User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>a boolean value</returns>
public async Task<bool> IsFollower(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.IsFollower,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<bool>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get Specific Follower
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollower</see></returns>
public async Task<XFriendshipFollower> GetFollower(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.Follower,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollower>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get Follower State of a User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipState</see></returns>
public async Task<XFriendshipState> GetFollowerState(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.FollowerState,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipState>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get Followers List Of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <returns>a collection of <see>XFriendshipFollower</see></returns>
public async Task<IEnumerable<XFriendshipFollower>> GetFollowers(
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.Followers);
//
var response = await RunRestRequest<IEnumerable<XFriendshipFollower>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get All Followers List Includes Blocked, Requested and etc
/// of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <returns>a collection of <see>XFriendshipFollower</see></returns>
public async Task<IEnumerable<XFriendshipFollower>> GetAllFollowers(
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.AllFollowers);
//
var response = await RunRestRequest<IEnumerable<XFriendshipFollower>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Return Followers UserName's List of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <returns>a collection of UserNames</returns>
public async Task<IEnumerable<string>> 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<IEnumerable<string>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Retrieve All User's Followers based on Query Model ...
/// </summary>
/// <param name="query">Query Model Descriptor</param>
/// <param name="destUser">Dest User for Reading Followers</param>
/// <param name="tokens">Requester User's Descriptor</param>
/// <returns></returns>
public async Task<XQueryResult<XFriendDto>> QueryFollowers(
XQuery query,
string destUser,
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(destUser)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.QueryFollowers);
//
// Attach XQuery to Request ...
request = request.AttachXQuery(query);
request = request.AttachDestUser(destUser);
//
var response = await RunRestRequest<XQueryResult<XFriendDto>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Check a User is in Followings of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>a boolean value</returns>
public async Task<bool> IsFollowing(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.IsFollowing,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<bool>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get Specific Following Model
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipFollowing</see></returns>
public async Task<XFriendshipFollowing> GetFollowing(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.Following,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipFollowing>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get Following State Relation between Specific User
/// and Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <param name="destUser">a user identifier which represent destination user</param>
/// <returns>an instance of <see>XFriendshipState</see></returns>
public async Task<XFriendshipState> GetFollowingState(
XTokenResponse tokens,
string destUser
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(
destUser,
tokens.AccessToken
)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(
XApiAccountEndpoint.FollowingState,
@params: new Dictionary<string, string> { { XParam.XDestUser.GetStringValue (), destUser }
}
);
//
var response = await RunRestRequest<XFriendshipState>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get Followings of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <returns>a collection of <see>XFriendshipFollowing</see></returns>
public async Task<IEnumerable<XFriendshipFollowing>> GetFollowings(
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.Followings);
//
var response = await RunRestRequest<IEnumerable<XFriendshipFollowing>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Get All Following List Includes Blocked, Requested and etc
/// of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <returns>a collection of <see>XFriendshipFollowing</see></returns>
public async Task<IEnumerable<XFriendshipFollowing>> GetAllFollowings(
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.AllFollowings);
//
var response = await RunRestRequest<IEnumerable<XFriendshipFollowing>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Return Following UserName's List of Current User
/// </summary>
/// <param name="tokens">Authentication Tokens</param>
/// <returns>a collection of UserNames</returns>
public async Task<IEnumerable<string>> GetFollowingList(
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.FollowingsList);
//
var response = await RunRestRequest<IEnumerable<string>>(
client,
request,
XHttpMethod.GET
);
return response;
}
/// <summary>
/// Retrieve All User's Followings based on Query Model ...
/// </summary>
/// <param name="query">Query Model Descriptor</param>
/// <param name="destUser">Dest User for Reading Followers</param>
/// <param name="tokens">Requester User's Descriptor</param>
/// <returns></returns>
public async Task<XQueryResult<XFriendDto>> QueryFollowings(
XQuery query,
string destUser,
XTokenResponse tokens
)
{
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder()
.AddNotNull(tokens)
.AddNotEmpty(destUser)
.AddNotEmpty(tokens.AccessToken)
.ValidateGroupAsync();
//
var client = GetRestClient(tokens);
//
var request = GetRestRequet(XApiAccountEndpoint.QueryFollowings);
//
// Attach XQuery to Request ...
request = request.AttachXQuery(query);
request = request.AttachDestUser(destUser);
//
var response = await RunRestRequest<XQueryResult<XFriendDto>>(
client,
request,
XHttpMethod.GET
);
return response;
}
#endregion
}
}