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 } }