using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Query; using Microsoft.Extensions.Logging; using xCommons.Configurations; using xCommons.Extensions; using xCommons.Providers; using xExceptions.Constants; using xIdentityService.Interfaces; using xModels.Dtos; using xPushService.Controllers; using xStringService.Interfaces; using xStringService.Models.Dtos; using xStringService.Models.Entities; using xStringService.Providers.Dtos; namespace xStringService.Controllers { public abstract class XStringProviderControllerBase : XBaseProvidedController, IXStringProviderController { private readonly IXStringProvider provider; protected XStringProviderControllerBase( ILogger logger, XAppConfiguration appConfiguration, IXIdentityProvider identityProvider, XValidationProvider validationProvider, IXStringProvider provider, Func, IOrderedQueryable> defaultOrderBuilder = null, Func, IIncludableQueryable> defaultIncludeBuilder = null ) : base( logger, appConfiguration, identityProvider, validationProvider, provider, defaultOrderBuilder, defaultIncludeBuilder ) { this.provider = provider; } // #region Tools ... /// /// Retrieve a List of Exists Languages ... /// /// /// [HttpGet("Languages")] public virtual async Task>> GetLanguages( CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetLanguages(cancellationToken); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve a List of Resource Titles ... /// /// if provided, returns all language Specified resource titles, if not, all Resource Titles /// /// [HttpGet("ResourceTitles")] public virtual async Task>> GetResourceTitles( [FromQuery] string language = null, CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetResourceTitles( language: language, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve all Exists Items which belongs to Specified Resource Title ... /// /// Specified Resource Title /// /// [HttpGet("ResourceLocales")] public virtual async Task>> GetResourceLocales( [FromQuery] string resource, CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetResourceLocales( resource: resource, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Extract Translation of a Resource in Specified Language ... /// /// Specified Language ... /// Specified Resource Title ... /// /// [HttpGet("Translation")] public virtual async Task> GetResourceTranslation( [FromQuery] string language, [FromQuery] string resource, CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetResourceTranslation( language: language, resource: resource, cancellationToken: cancellationToken ); // return Ok(result); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve a Resource as Locale Model ... /// /// Specified Language ... /// Specified Resource Title ... /// /// [HttpGet("Locale")] public virtual async Task> GetLocale( [FromQuery] string language, [FromQuery] string resource, CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetLocale( language: language, resource: resource, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve all Exists Resource Instances as Locale Models ... /// /// /// /// [HttpGet("Locales")] public virtual async Task>> GetLocales( [FromQuery] string resource, CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetLocales( resource: resource, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve all Locales of Specified Resource and Represent as XResourceDto ... /// /// /// /// [HttpGet("GetResource")] public virtual async Task> GetResource( [FromQuery] string resource, CancellationToken cancellationToken = default ) { // try { // var result = await provider .GetResource( resource: resource, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Add or Update a Resource Model ... /// /// a XResourceDto Model ... /// /// [HttpPost("AddOrUpdateResource")] public virtual async Task> AddOrUpdateResource( [FromBody] XResourceDto resource, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotNull(resource) .AddNotEmpty(resource.Resource) .ValidateGroupAsync(); // var userInfo = await GetUserInfo(); var connectionId = GetConnectionId(); // var result = await provider .AddOrUpdateResource( resource: resource, userInfo: userInfo, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(result.ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Remove Specified Resource Model ... /// /// a XResourceDto Model ... /// /// [HttpPost("RemoveResource")] public virtual async Task RemoveResource( [FromBody] XResourceDto resource, CancellationToken cancellationToken = default ) { // try { // // Validate ... if (!ModelState.IsValid) { XException.InvalidArgs.Throw(); } await ValidationProvider .GroupValidationBuilder() .AddNotNull(resource) .AddNotEmpty(resource.Resource) .ValidateGroupAsync(); // var userInfo = await GetUserInfo(); var connectionId = GetConnectionId(); // await provider .RemoveResource( resource: resource, userInfo: userInfo, connectionId: connectionId, cancellationToken: cancellationToken ); // return Ok(); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } #endregion } }