using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; 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 xModels.Dtos; using xStringService.Interfaces; using xStringService.Models.Dtos; namespace xStringService.Controllers { /// /// an Implementation of Base Actions of a Controller which Provides /// XString Resource Service Actions ... /// public abstract class XBaseStringResourceProviderControllerBase : XBaseIdentityApiV1Controller, IXBaseStringResourceProviderControllerBase { private readonly IXBaseStringResourceProvider resourceProvider; protected XBaseStringResourceProviderControllerBase( ILogger logger, XAppConfiguration appConfiguration, IXIdentityProvider identityProvider, XValidationProvider validationProvider, IXBaseStringResourceProvider resourceProvider ) : base( logger, appConfiguration, identityProvider, validationProvider ) { this.resourceProvider = resourceProvider; } /// /// Add Specified Locales ... /// /// /// /// /// [HttpPost("Add")] public virtual async Task>> Add( [FromQuery] string suffix, [FromBody] XBaseRangeRequest locales, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(suffix) .AddNotNull(locales) .AddNotZeroChilds(locales.Items) .ValidateGroupAsync(); // var connectionId = GetConnectionId(); // var result = await resourceProvider.Add( suffix: suffix, locales: locales.Items, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Add or Update Specified Locales ... /// /// /// /// /// [HttpPost("AddOrUpdate")] public virtual async Task>> AddOrUpdate( [FromQuery] string resource, [FromBody] XBaseRangeRequest locales, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(resource) .AddNotNull(locales) .AddNotZeroChilds(locales.Items) .ValidateGroupAsync(); // var connectionId = GetConnectionId(); // var result = await resourceProvider.AddOrUpdate( resource: resource, locales: locales.Items, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Add Specified Resource ... /// /// /// /// /// [HttpPost("AddResource")] public virtual async Task> AddResource( [FromQuery] string suffix, [FromBody] XResourceDto item, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(suffix) .AddNotNull(item) .AddNotZeroChilds(item.Locales) .ValidateGroupAsync(); // var connectionId = GetConnectionId(); // var result = await resourceProvider.AddResource( item: item, suffix: suffix, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Get Specified Locale ... /// /// /// /// /// [HttpGet("GetLocale")] public virtual async Task> GetLocale( [FromQuery] string suffix, [FromQuery] string language = null, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(suffix) .ValidateGroupAsync(); // var result = await resourceProvider.GetLocale( suffix: suffix, language: language, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Get Resources of Specified Resource Title ... /// /// /// /// [HttpGet("GetResource")] public virtual async Task> GetResource( [FromQuery] string suffix, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(suffix) .ValidateGroupAsync(); // var result = await resourceProvider.GetResource( suffix: suffix, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Remove all Resources which belongs to Specified Suffix ... /// /// /// /// [HttpDelete("Remove")] public virtual async Task Remove( [FromQuery] string suffix, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(suffix) .ValidateGroupAsync(); // var connectionId = GetConnectionId(); // await resourceProvider.Remove( suffix: suffix, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Remove Specified Resource ... /// /// /// /// /// [HttpDelete("RemoveResource")] public virtual async Task Remove( [FromQuery] string resource, [FromQuery] string language, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotEmpty(resource) .AddNotEmpty(language) .ValidateGroupAsync(); // var connectionId = GetConnectionId(); // await resourceProvider.Remove( resource: resource, language: language, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } } }