diff --git a/Controllers/XTermsAndComditionsControllerBase.cs b/Controllers/XTermsAndComditionsControllerBase.cs deleted file mode 100644 index 15141c0..0000000 --- a/Controllers/XTermsAndComditionsControllerBase.cs +++ /dev/null @@ -1,313 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using xCommons.Configurations; -using xCommons.Extensions; -using xCommons.Providers; -using xExceptions.Constants; -using xIdentityService.Controllers; -using xIdentityService.Interfaces; -using xModels.Base; -using xTermsAndConditionsService.Interfaces; - -namespace xTermsAndConditionsService.Controllers -{ - /// - /// a Base Controller Implementation for Providing Base Actions of - /// Terms and Conditions Provided Actions ... - /// - [AllowAnonymous] - public abstract class XTermsAndComditionsControllerBase : XBaseIdentityApiV1Controller, IXTermsAndComditionsController - { - private readonly IXTermsAndComditionsProvider provider; - - protected XTermsAndComditionsControllerBase( - ILogger logger, - XAppConfiguration appConfiguration, - IXIdentityProvider identityProvider, - IXTermsAndComditionsProvider provider, - XValidationProvider validationProvider - ) : base( - logger, - appConfiguration, - identityProvider, - validationProvider - ) - { - this.provider = provider; - } - - // - #region Actions ... - /// - /// Retrieved all Exists Languages Terms and Conditions ... - /// - /// - [HttpGet("Terms/Languages")] - public virtual async Task>> TermsLanguages( - CancellationToken cancellationToken = default - ) - { - // - try - { - // - var result = await provider.TermsLanguages( - cancellationToken: cancellationToken - ); - - // - return Ok(result.ToDynamicObject()); - } - catch (Exception ex) - { - // - var result = GetExceptionActionResult(ex); - return result; - } - } - - /// - /// Check Has Terms and Conditions based on Specified Language ... - /// - /// if null, used Default Language ... - /// - [HttpGet("Terms/{language}/Has")] - public virtual async Task> HasTerms( - [FromRoute] string language = null, - CancellationToken cancellationToken = default - ) - { - // - try - { - // - // Validate ... - if (!ModelState.IsValid) - { - XException.InvalidArgs.Throw(); - } - await ValidationProvider - .GroupValidationBuilder() - .AddNotEmpty(language) - .ValidateGroupAsync(); - - // - var result = await provider.HasTerms( - language: language, - cancellationToken: cancellationToken - ); - - // - return Ok(result); - } - catch (Exception ex) - { - // - var result = GetExceptionActionResult(ex); - return result; - } - } - - /// - /// Retrieve Terms and Conditions for Specified Language ... - /// - /// if null, used Default Language ... - /// - [HttpGet("Terms/{language}")] - public virtual async Task> GetTerms( - [FromRoute] string language = null, - CancellationToken cancellationToken = default - ) - { - // - try - { - // - // Validate ... - if (!ModelState.IsValid) - { - XException.InvalidArgs.Throw(); - } - await ValidationProvider - .GroupValidationBuilder() - .AddNotEmpty(language) - .ValidateGroupAsync(); - - // - var result = await provider.GetTerms( - language: language, - cancellationToken: cancellationToken - ); - - // - return Ok(result); - } - catch (Exception ex) - { - // - var result = GetExceptionActionResult(ex); - return result; - } - } - - /// - /// Add Terms and Conditions for Specified Language ... - /// - /// - /// - /// - [HttpPost("Terms/{language}")] - public virtual async Task> AddTerms( - [FromRoute] string language, - [FromBody] XBaseValueContainer terms, - CancellationToken cancellationToken = default - ) - { - // - try - { - // - // Validate ... - if (!ModelState.IsValid) - { - XException.InvalidArgs.Throw(); - } - await ValidationProvider - .GroupValidationBuilder() - .AddNotEmpty(language) - .AddNotNull(terms) - .AddNotEmpty(terms.Value) - .ValidateGroupAsync(); - - // - var userInfo = await GetUserInfo(); - var connectionId = GetConnectionId(); - - // - var result = await provider.AddTerms( - language: language, - terms: terms.Value, - userInfo: userInfo, - connectionId: connectionId, - cancellationToken: cancellationToken - ); - - // - return Ok(result); - } - catch (Exception ex) - { - // - var result = GetExceptionActionResult(ex); - return result; - } - } - - /// - /// Remove Terms and Conditions of Specified Language ... - /// - /// - /// - [HttpDelete("Terms/{language}")] - public virtual async Task> RemoveTerms( - [FromRoute] string language, - CancellationToken cancellationToken = default - ) - { - // - try - { - // - // Validate ... - if (!ModelState.IsValid) - { - XException.InvalidArgs.Throw(); - } - await ValidationProvider - .GroupValidationBuilder() - .AddNotEmpty(language) - .ValidateGroupAsync(); - - // - var userInfo = await GetUserInfo(); - var connectionId = GetConnectionId(); - - // - var result = await provider.RemoveTerms( - language: language, - userInfo: userInfo, - connectionId: connectionId, - cancellationToken: cancellationToken - ); - - // - return Ok(result); - } - catch (Exception ex) - { - // - var result = GetExceptionActionResult(ex); - return result; - } - } - - /// - /// Update Terms and Conditions of Specified Language ... - /// - /// - /// - /// - [HttpPut("Terms/{language}")] - public virtual async Task> UpdateTerms( - [FromRoute] string language, - [FromBody] XBaseValueContainer terms, - CancellationToken cancellationToken = default - ) - { - // - try - { - // - // Validate ... - if (!ModelState.IsValid) - { - XException.InvalidArgs.Throw(); - } - await ValidationProvider - .GroupValidationBuilder() - .AddNotEmpty(language) - .AddNotNull(terms) - .AddNotEmpty(terms.Value) - .ValidateGroupAsync(); - - // - var userInfo = await GetUserInfo(); - var connectionId = GetConnectionId(); - - // - var result = await provider.UpdateTerms( - language: language, - terms: terms.Value, - userInfo: userInfo, - connectionId: connectionId, - cancellationToken: cancellationToken - ); - - // - return Ok(result); - } - catch (Exception ex) - { - // - var result = GetExceptionActionResult(ex); - return result; - } - } - #endregion - } -} \ No newline at end of file diff --git a/Controllers/XTermsAndConditionsControllerBase.cs b/Controllers/XTermsAndConditionsControllerBase.cs new file mode 100644 index 0000000..c65030f --- /dev/null +++ b/Controllers/XTermsAndConditionsControllerBase.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using xCommons.Configurations; +using xCommons.Extensions; +using xCommons.Providers; +using xExceptions.Constants; +using xIdentityService.Controllers; +using xIdentityService.Interfaces; +using xModels.Base; +using xStringService.Controllers; +using xTermsAndConditionsService.Interfaces; +using xTermsAndConditionsService.Providers; + +namespace xTermsAndConditionsService.Controllers +{ + /// + /// a Base Controller Implementation for Providing Base Actions of + /// Terms and Conditions Provided Actions ... + /// + [AllowAnonymous] + public abstract class XTermsAndConditionsControllerBase : XBaseResourceProviderControllerBase, IXTermsAndConditionsController + { + protected XTermsAndConditionsControllerBase( + ILogger logger, + XAppConfiguration appConfiguration, + IXIdentityProvider identityProvider, + XValidationProvider validationProvider, + IXTermsAndConditionsProvider provider + ) : base( + logger, + appConfiguration, + identityProvider, + validationProvider, + provider + ) + { } + } +} \ No newline at end of file diff --git a/DI/XDIHelperExtension.cs b/DI/XDIHelperExtension.cs index 1517d41..b96f120 100644 --- a/DI/XDIHelperExtension.cs +++ b/DI/XDIHelperExtension.cs @@ -294,7 +294,7 @@ namespace xTermsAndConditionsService.DI // // Register Resource Providers ... - services.Add(new ServiceDescriptor(typeof(IXTermsAndComditionsProvider), typeof(XTermsAndComditionsProvider), lifeTime)); + services.Add(new ServiceDescriptor(typeof(IXTermsAndConditionsProvider), typeof(XTermsAndConditionsProvider), lifeTime)); } #endregion } diff --git a/Interfaces/IXTermsAndComditionsController.cs b/Interfaces/IXTermsAndComditionsController.cs deleted file mode 100644 index 32ff929..0000000 --- a/Interfaces/IXTermsAndComditionsController.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using xModels.Base; - -namespace xTermsAndConditionsService.Interfaces -{ - /// - /// an Interface for Describing Terms and Conditions Management Controller Actions ... - /// - public interface IXTermsAndComditionsController - { - /// - /// Retrieved all Exists Languages Terms and Conditions ... - /// - /// - [HttpGet("Terms/Languages")] - Task>> TermsLanguages( - CancellationToken cancellationToken = default - ); - - /// - /// Check Has Terms and Conditions based on Specified Language ... - /// - /// if null, used Default Language ... - /// - [HttpGet("Terms/{language}/Has")] - Task> HasTerms( - [FromRoute] string language = null, - CancellationToken cancellationToken = default - ); - - /// - /// Retrieve Terms and Conditions for Specified Language ... - /// - /// if null, used Default Language ... - /// - [HttpGet("Terms/{language}")] - Task> GetTerms( - [FromRoute] string language = null, - CancellationToken cancellationToken = default - ); - - /// - /// Add Terms and Conditions for Specified Language ... - /// - /// - /// - /// - [HttpPost("Terms/{language}")] - Task> AddTerms( - [FromRoute] string language, - [FromBody] XBaseValueContainer terms, - CancellationToken cancellationToken = default - ); - - /// - /// Remove Terms and Conditions of Specified Language ... - /// - /// - /// - [HttpDelete("Terms/{language}")] - Task> RemoveTerms( - [FromRoute] string language, - CancellationToken cancellationToken = default - ); - - /// - /// Update Terms and Conditions of Specified Language ... - /// - /// - /// - /// - [HttpPut("Terms/{language}")] - Task> UpdateTerms( - [FromRoute] string language, - [FromBody] XBaseValueContainer terms, - CancellationToken cancellationToken = default - ); - } -} \ No newline at end of file diff --git a/Interfaces/IXTermsAndComditionsProvider.cs b/Interfaces/IXTermsAndComditionsProvider.cs deleted file mode 100644 index 0a840e9..0000000 --- a/Interfaces/IXTermsAndComditionsProvider.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using xIdentityModels.Models; - -namespace xTermsAndConditionsService.Interfaces -{ - /// - /// an Interface for Describing Terms and Conditions Management Provided Actions ... - /// - public interface IXTermsAndComditionsProvider - { - #region Actions ... - /// - /// Retrieved all Exists Languages Terms and Conditions ... - /// - /// - /// - Task> TermsLanguages( - CancellationToken cancellationToken = default - ); - - /// - /// Check Has Terms and Conditions based on Specified Language ... - /// - /// if null, used Default Language ... - /// - /// - Task HasTerms( - string language = null, - CancellationToken cancellationToken = default - ); - - /// - /// Retrieve Terms and Conditions for Specified Language ... - /// - /// if null, used Default Language ... - /// - /// - Task GetTerms( - string language = null, - CancellationToken cancellationToken = default - ); - - /// - /// Add Terms and Conditions for Specified Language ... - /// - /// - /// - /// - /// - /// - /// - Task AddTerms( - string language, - string terms, - XUserClaimsInfoDto userInfo = null, - string connectionId = null, - CancellationToken cancellationToken = default - ); - - /// - /// Remove Terms and Conditions of Specified Language ... - /// - /// - /// - /// - /// - /// - Task RemoveTerms( - string language, - XUserClaimsInfoDto userInfo = null, - string connectionId = null, - CancellationToken cancellationToken = default - ); - - /// - /// Update Terms and Conditions of Specified Language ... - /// - /// - /// - /// - /// - /// - /// - Task UpdateTerms( - string language, - string terms, - XUserClaimsInfoDto userInfo = null, - string connectionId = null, - CancellationToken cancellationToken = default - ); - #endregion - } -} \ No newline at end of file diff --git a/Interfaces/IXTermsAndConditionsController.cs b/Interfaces/IXTermsAndConditionsController.cs new file mode 100644 index 0000000..fc4e357 --- /dev/null +++ b/Interfaces/IXTermsAndConditionsController.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using xModels.Base; +using xStringService.Interfaces; + +namespace xTermsAndConditionsService.Interfaces +{ + /// + /// an Interface for Describing Terms and Conditions Management Controller Actions ... + /// + public interface IXTermsAndConditionsController : IXBaseResourceProviderController + { } +} \ No newline at end of file diff --git a/Interfaces/IXTermsAndConditionsProvider.cs b/Interfaces/IXTermsAndConditionsProvider.cs new file mode 100644 index 0000000..cc13dcc --- /dev/null +++ b/Interfaces/IXTermsAndConditionsProvider.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using xIdentityModels.Models; +using xStringService.Interfaces; + +namespace xTermsAndConditionsService.Interfaces +{ + /// + /// an Interface for Describing Terms and Conditions Management Provided Actions ... + /// + public interface IXTermsAndConditionsProvider : IXResourceProvider + { } +} \ No newline at end of file diff --git a/Providers/XTermsAndComditionsProvider.cs b/Providers/XTermsAndComditionsProvider.cs deleted file mode 100644 index d55e2d6..0000000 --- a/Providers/XTermsAndComditionsProvider.cs +++ /dev/null @@ -1,495 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.SignalR; -using xCommons.Configurations; -using xCommons.Extensions; -using xExceptions.Constants; -using xIdentityModels.Extensions; -using xIdentityModels.Models; -using xPushService.Constants; -using xStringService.Interfaces.Dtos; -using xStringService.Models.Dtos; -using xTermsAndConditionsService.Configuration; -using xTermsAndConditionsService.Hubs; -using xTermsAndConditionsService.Interfaces; - -namespace xTermsAndConditionsService.Providers -{ - /// - /// an Implementation of Terms and Conditions Management Provided Actions ... - /// - public class XTermsAndComditionsProvider : IXTermsAndComditionsProvider - { - // - #region Props ... - private readonly string termsId; - private readonly string[] allowedRoles; - private readonly IHubContext hub; - private readonly XAppConfiguration appConfiguration; - private readonly IXStringServiceProvider stringProvider; - private readonly XTermsAndConditionsServiceConfiguration serviceConfiguration; - #endregion - - // - #region Constructor ... - public XTermsAndComditionsProvider( - XAppConfiguration appConfiguration, - IXStringServiceProvider stringProvider, - XTermsAndConditionsServiceConfiguration serviceConfiguration, - IHubContext hub = null - ) - { - // - this.hub = hub; - this.stringProvider = stringProvider; - this.appConfiguration = appConfiguration; - this.serviceConfiguration = serviceConfiguration; - - // - termsId = serviceConfiguration.ResourceTitle; - - // - // Specified roles for Handling Dangerouse Actions ... - this.allowedRoles = new string[] - { - "admin" - }; - } - #endregion - - // - #region Actions ... - /// - /// Retrieved all Exists Languages Terms and Conditions ... - /// - /// - /// - public async Task> TermsLanguages( - CancellationToken cancellationToken = default - ) - { - // - var result = (await stringProvider - .FindManyAsync( - includeBuilder: null, - ignoreSoftDeleteds: true, - cancellationToken: cancellationToken, - predicate: x => x.ResourceTitle == termsId, - orderBuilder: x => x.OrderBy(y => y.ResourceTitle) - )) - .Select(x => x.Language); - return result; - } - - /// - /// Check Has Terms and Conditions based on Specified Language ... - /// - /// if null, used Default Language ... - /// - /// - public async Task HasTerms( - string language = null, - CancellationToken cancellationToken = default - ) - { - // - // Normalize ... - if (language.IsNullOrEmpty()) - { - language = appConfiguration.DefaultLanguage; - } - - // - var result = !(await GetString( - language: language, - cancellationToken: cancellationToken - )) - .IsNullOrDefault(); - - // - return result; - } - - /// - /// Retrieve Terms and Conditions for Specified Language ... - /// - /// if null, used Default Language ... - /// - /// - public async Task GetTerms( - string language = null, - CancellationToken cancellationToken = default - ) - { - // - var result = string.Empty; - var item = await GetString( - language: language, - cancellationToken: cancellationToken - ); - - // - if (!item.IsNullOrDefault()) - { - result = item.TranslatedValue; - } - - // - return result; - } - - /// - /// Add Terms and Conditions for Specified Language ... - /// - /// - /// - /// - /// - /// - /// - public async Task AddTerms( - string language, - string terms, - XUserClaimsInfoDto userInfo = null, - string connectionId = null, - CancellationToken cancellationToken = default - ) - { - // - // Validate ... - var isValid = - !language.IsNullOrEmpty() && - !terms.IsNullOrEmpty() && - !userInfo.IsNullOrDefault() && - language != appConfiguration.DefaultLanguage; - if (!isValid) - { - XException.InvalidArgs.Throw(); - } - - // - // Check Exists ... - isValid = await HasTerms( - language: language, - cancellationToken: cancellationToken - ); - if (isValid) - { - XException.Duplicate.Throw(); - } - - // - // Check Permission ... - isValid = userInfo.HasAccess(allowedRoles); - if (!isValid) - { - XException.NotAllowed.Throw(); - } - - // - // Add Terms ... - XStringDto item = null; - try - { - // - item = new XStringDto - { - Language = language, - ResourceTitle = termsId, - TranslatedValue = terms, - }; - item = await stringProvider.AddAsync( - item: item, - saveChanges: true, - cancellationToken: cancellationToken - ); - } - catch { } - - // - var result = string.Empty; - if (!item.IsNullOrDefault()) - { - result = item.TranslatedValue; - } - - // - if (!result.IsNullOrEmpty()) - { - // - await SendPush( - connectionId: connectionId, - cancellationToken: cancellationToken, - payLoad: item.ToJSON(camelCase: true), - action: XBaseEntityHubAction.Add.GetStringValue() - ); - } - - // - return result; - } - - /// - /// Remove Terms and Conditions of Specified Language ... - /// - /// - /// - /// - /// - /// - /// - public async Task RemoveTerms( - string language, - XUserClaimsInfoDto userInfo = null, - string connectionId = null, - CancellationToken cancellationToken = default - ) - { - // - var isValid = - !language.IsNullOrEmpty() && - !userInfo.IsNullOrDefault() && - language != appConfiguration.DefaultLanguage; - if (!isValid) - { - XException.InvalidArgs.Throw(); - } - - // - // Check Exists ... - var item = await GetString( - language: language, - cancellationToken: cancellationToken - ); - isValid = !item.IsNullOrDefault(); - if (!isValid) - { - XException.NotFound.Throw(); - } - - // - // Check Permission ... - isValid = userInfo.HasAccess(allowedRoles); - if (!isValid) - { - XException.NotAllowed.Throw(); - } - - // - try - { - // - item = await stringProvider.RemoveAsync( - id: item.Id, - softDelete: false, - saveChanges: true, - cancellationToken: cancellationToken - ); - } - catch - { - item = null; - } - - // - var result = !item.IsNullOrDefault(); - if (result) - { - // - await SendPush( - connectionId: connectionId, - cancellationToken: cancellationToken, - payLoad: item.ToJSON(camelCase: true), - action: XBaseEntityHubAction.Delete.GetStringValue() - ); - } - - // - return result; - } - - /// - /// Update Terms and Conditions of Specified Language ... - /// - /// - /// - /// - /// - /// - /// - public async Task UpdateTerms( - string language, - string terms, - XUserClaimsInfoDto userInfo = null, - string connectionId = null, - CancellationToken cancellationToken = default - ) - { - // - var isValid = - !terms.IsNullOrEmpty() && - !language.IsNullOrEmpty() && - !userInfo.IsNullOrDefault(); - if (!isValid) - { - XException.InvalidArgs.Throw(); - } - - // - // Check Exists ... - var item = await GetString( - language: language, - cancellationToken: cancellationToken - ); - isValid = !item.IsNullOrDefault(); - if (!isValid) - { - XException.NotFound.Throw(); - } - - // - // Check Permission ... - isValid = userInfo.HasAccess(allowedRoles); - if (!isValid) - { - XException.NotAllowed.Throw(); - } - - // - try - { - // - item.TranslatedValue = terms; - item = await stringProvider.UpdateAsync( - id: item.Id, - item: item, - saveChanges: true, - cancellationToken: cancellationToken - ); - } - catch - { - item = null; - } - - // - var result = !item.IsNullOrDefault(); - if (result) - { - // - await SendPush( - connectionId: connectionId, - cancellationToken: cancellationToken, - payLoad: item.ToJSON(camelCase: true), - action: XBaseEntityHubAction.Update.GetStringValue() - ); - } - - // - return result; - } - #endregion - - // - #region Hub Actions ... - /// - /// Send Custom Push Message ... - /// - /// - /// - /// - /// - /// - public async Task SendPush( - string action, - string payLoad, - string connectionId = null, - CancellationToken cancellationToken = default - ) - { - // - var actions = new List - { - XBaseEntityHubAction.Add.GetStringValue(), - XBaseEntityHubAction.Update.GetStringValue(), - XBaseEntityHubAction.Delete.GetStringValue(), - }; - - // - // Validate ... - var isValid = - !hub.IsNull() && - !action.IsNullOrEmpty() && - actions.Contains(action); - if (!isValid) - { - return; - } - - // - var clients = hub.Clients.All; - if (!connectionId.IsNullOrEmpty()) - { - clients = hub.Clients.AllExcept(connectionId); - } - try - { - // - await clients.SendAsync( - action, - payLoad, - connectionId, - cancellationToken - ); - } - catch { } - } - #endregion - - // - #region Private ... - /// - /// Retrieve Terms and Conditions XString Entity ... - /// - /// - /// - /// - private async Task GetString( - string language = null, - CancellationToken cancellationToken = default - ) - { - // - // Normalize ... - if (language.IsNullOrEmpty()) - { - language = appConfiguration.DefaultLanguage; - } - - // - // Retrieve ... - XStringDto result = null; - try - { - // - result = await stringProvider.FindOneAsync( - includeBuilder: null, - ignoreSoftDeleteds: true, - predicate: x => - x.Language == language && - x.ResourceTitle == termsId, - cancellationToken: cancellationToken - ); - } - catch - { - } - - // - return result; - } - #endregion - } -} \ No newline at end of file diff --git a/Providers/XTermsAndConditionsProvider.cs b/Providers/XTermsAndConditionsProvider.cs new file mode 100644 index 0000000..2751342 --- /dev/null +++ b/Providers/XTermsAndConditionsProvider.cs @@ -0,0 +1,32 @@ +using System; +using System.Linq; +using System.Reflection; +using xCommons.Extensions; +using xStringService.Interfaces.Dtos; +using xStringService.Providers; +using xTermsAndConditionsService.Configuration; +using xTermsAndConditionsService.Interfaces; + +namespace xTermsAndConditionsService.Providers +{ + /// + /// an Implementation of Terms and Conditions Management Provided Actions ... + /// + public class XTermsAndConditionsProvider : XBaseResourceProvider, IXTermsAndConditionsProvider + { + public XTermsAndConditionsProvider( + IXStringServiceProvider provider, + XTermsAndConditionsServiceConfiguration configuration + ) : base( + resource: "NULL", + provider + ) + { + // + // Since we nee to Set Resource Title of Terms and Conditions + // during instancing using Provided Configurations ... + // set this value here ... + resource = configuration.ResourceTitle; + } + } +} \ No newline at end of file