using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using xCommons.Extensions;
using xHttpService.Constants;
using xHttpService.Extensions;
using xIdentityModels.Dtos;
using xIdentityModels.Models;
using xIdentityModels.Navigations;
using xIdentityService.Constants;
using xModels.Dtos;
namespace xIdentityService.Providers {
public partial class XIdentityProvider {
//
#region User Actions ...
///
/// Retrieve User Names based on UserIds
///
/// Authentication Tokens
/// a comma seperated list of UserIds
/// a collection of UserNames
public async Task> GetUserNames (
XTokenResponse tokens,
string ids
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens)
.AddNotEmpty (ids, tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
var request = GetRestRequet (
XApiAccountEndpoint.GetNames,
@params : new Dictionary { { XParam.XIds.GetStringValue (), ids } }
);
//
var response = await RunRestRequest> (
client,
request,
XHttpMethod.GET
);
return response;
}
///
/// get user ids and retrieve corresponding user names
///
/// Authentication Tokens
/// an instance of XUserNameIdRequest which represent required UserIds collection
/// a collection of XUserNameIdResponse instance
public async Task> GetUserNameIds (
XTokenResponse tokens,
XUserNameIdRequest model
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (model, tokens)
.AddNotZeroChilds (model.Ids)
.AddNotEmpty (tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
var request = GetRestRequet (XApiAccountEndpoint.GetNameIds);
request.AddJsonBody (model);
//
var response = await RunRestRequest> (
client,
request,
XHttpMethod.POST
);
return response;
}
#endregion
//
#region Profile Actions ...
///
/// Get Profile Object of Specific User
///
/// Authentication Tokens
/// determine's which user profile must be retrieved
/// an instance of XUserProfileDto
public async Task GetUserProfile (
XTokenResponse tokens,
string userSelectByParam
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens)
.AddNotEmpty (userSelectByParam, tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.GetProfile,
@params : new Dictionary { { XParam.XUserSelectByParam.GetStringValue (), userSelectByParam } }
);
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.GET
);
return response;
}
///
/// Retrieve Users Based On Query
///
/// Authentication Tokens
/// how to filter results based on XQuery structure
/// an instance of XQueryResult of XUserProfileDto
public async Task> QueryUsers (
XTokenResponse tokens,
XQuery query
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens, query)
.AddNotEmpty (tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (XApiAccountEndpoint.QueryProfiles);
//
// Attach XQuery to Request ...
request = request.AttachXQuery (query);
//
var response = await RunRestRequest> (
client,
request,
XHttpMethod.GET
);
return response;
}
///
/// Retrieve Users Based On Query and Specified role
///
/// Authentication Tokens
/// an string which represent user role
/// how to filter results based on XQuery structure
/// if it's true the user must has exact role, otherwise top level users also listed
/// an instance of XQueryResult of XUserProfileDto
public async Task> QueryInRoleUsers (
XTokenResponse tokens,
string role,
XQuery query,
bool forceRole = false
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens, query)
.AddNotEmpty (tokens.AccessToken, role)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.QueryProfiles,
headers : new Dictionary { { XParam.XRole.GetStringValue (), role },
{ XParam.XForceRole.GetStringValue (), forceRole.AsHttpParamString () }
}
);
//
// Attach XQuery to Request ...
request = request.AttachXQuery (query);
//
var response = await RunRestRequest> (
client,
request,
XHttpMethod.GET
);
return response;
}
///
/// Query Specified User's Profile Images
///
/// Authentication Tokens
/// determine's which user profile must be retrieved
/// how to filter results based on XQuery structure
/// an instance of XQueryResult of XProfileImage
public async Task> QueryAvatars (
XTokenResponse tokens,
string userSelectByParam,
XQuery query
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens, query)
.AddNotEmpty (tokens.AccessToken, userSelectByParam)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.QueryAvatars,
@params : new Dictionary { { XParam.XUserSelectByParam.GetStringValue (), userSelectByParam }
}
);
//
// Attach XQuery to Request ...
request = request.AttachXQuery (query);
//
var response = await RunRestRequest> (
client,
request,
XHttpMethod.GET
);
return response;
}
///
/// Update User Profile based on XProfileUpdateRequest (FirstName/LastName/DateOfBirth)
///
/// Authentication Tokens
/// determine's which user profile must be retrieved
/// user update info, an instance of XProfileUpdateRequest
/// an instance of XUserProfileDto
public async Task ProfileUpdateAsync (
XTokenResponse tokens,
string userSelectByParam,
XProfileUpdateRequest model
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens, model)
.AddNotEmpty (tokens.AccessToken, userSelectByParam)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.UpdateProfile,
@params : new Dictionary { { XParam.XUserSelectByParam.GetStringValue (), userSelectByParam }
}
);
request.AddJsonBody (model);
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.POST
);
return response;
}
///
/// Update a User Profile based on XProfileUpdateRequest Full
///
/// Authentication Tokens
/// determine's which user profile must be retrieved
/// user update info, an instance of XProfileUpdateRequest
/// an instance of XUserProfileDto
public async Task FullProfileUpdateAsync (
XTokenResponse tokens,
string userSelectByParam,
XProfileUpdateRequest model
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens, model)
.AddNotEmpty (tokens.AccessToken, userSelectByParam)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.FullUpdateProfile,
@params : new Dictionary { { XParam.XUserSelectByParam.GetStringValue (), userSelectByParam }
}
);
request.AddJsonBody (model);
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.POST
);
return response;
}
///
/// Add a New Profile Image
///
/// Authentication Tokens
/// an specific File to upload, IFormFile
/// an instance of XUserProfileDto
public async Task AddAvatar (
XTokenResponse tokens,
IFormFile file
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens, file)
.AddNotEmpty (tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (XApiAccountEndpoint.AddAvatar);
request.AlwaysMultipartFormData = true;
request.AddFileBytes (
XParam.XFile.GetStringValue (),
file.ToByteArray (),
file.FileName,
file.ContentType
);
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.POST
);
return response;
}
///
/// Add a New Collection of Profile Images
///
/// Authentication Tokens
/// a collection of Files to upload, IFormFileCollection
/// an instance of XUserProfileDto
public async Task AddAvatars (
XTokenResponse tokens,
IFormFileCollection files
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens)
.AddNotZeroChilds (files)
.AddNotEmpty (tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (XApiAccountEndpoint.AddAvatars);
request.AlwaysMultipartFormData = true;
//
// Add Files ...
foreach (var file in files) {
//
// Add Single file ...
request.AddFileBytes (
XParam.XFiles.GetStringValue (),
file.ToByteArray (),
file.FileName,
file.ContentType
);
}
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.POST
);
return response;
}
///
/// set Specified Profile Image as Avatar
///
/// Authentication Tokens
/// an integer which reperesent AvatarId to set as current Avatar
/// an instance of XUserProfileDto
public async Task SetAvatar (
XTokenResponse tokens,
int id
) {
//
// Validate Args ...
id.ValidateIntId ();
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens)
.AddNotEmpty (tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.SetAvatar,
@params : new Dictionary { { XParam.XId.GetStringValue (), id.ToString () }
}
);
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.POST
);
return response;
}
///
/// Remove Profile Images
///
/// Authentication Tokens
/// a comma seperated list of avatarIds to remove
/// an instance of XUserProfileDto
public async Task RemoveAvatars (
XTokenResponse tokens,
string avatarIds
) {
//
// Validate Args ...
await validationProvider
.GroupValidationBuilder ()
.AddNotNull (tokens)
.AddNotEmpty (avatarIds, tokens.AccessToken)
.ValidateGroupAsync ();
//
var client = GetRestClient (tokens);
//
var request = GetRestRequet (
XApiAccountEndpoint.RemoveAvatars,
@params : new Dictionary { { XParam.XIds.GetStringValue (), avatarIds }
}
);
//
var response = await RunRestRequest (
client,
request,
XHttpMethod.DELETE
);
return response;
}
#endregion
}
}