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