diff --git a/Controller/XStringServiceControllerBase.cs b/Controller/XStringServiceControllerBase.cs
new file mode 100644
index 0000000..9589fe3
--- /dev/null
+++ b/Controller/XStringServiceControllerBase.cs
@@ -0,0 +1,809 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using xCommons.Configurations;
+using xCommons.Extensions;
+using xCommons.Providers;
+using xIdentityService.Controllers;
+using xIdentityService.Interfaces;
+using xModels.Dtos;
+using xStringService.Interfaces;
+using xStringService.Models.Dtos;
+
+namespace xStringService.Controller
+{
+ public class XStringServiceControllerBase : XIBaseProviderController, IXStringServiceControllerActions
+ {
+ //
+ #region Props ...
+ public IXStringProvider StringProvider { get; }
+ #endregion
+
+ //
+ #region Constructor ...
+ public XStringServiceControllerBase(
+ ILogger logger,
+ IXStringProvider stringProvider,
+ XAppConfiguration appConfiguration,
+ IXIdentityProvider identityProvider,
+ XValidationProvider validationProvider
+ ) : base(
+ logger,
+ appConfiguration,
+ identityProvider,
+ validationProvider
+ )
+ {
+ //
+ StringProvider = stringProvider;
+ }
+ #endregion
+
+ //
+ #region Retrievers ...
+ ///
+ /// Retrieve all Exists Languages ...
+ ///
+ ///
+ [HttpGet("Languages")]
+ public virtual async Task>> GetLanguages()
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .GetLanguages();
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Check Specified Resource Exists or not ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("IsResourceExists")]
+ public virtual async Task> IsResourceExists(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .IsResourceExists(
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Retrieve Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("")]
+ public virtual async Task> Get(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .Get(
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Retrieve Specified Translation of Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("ResourceValue")]
+ public virtual async Task> GetResourceValue(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .GetResourceValue(
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Retrieve an Specified Resource Items ...
+ ///
+ ///
+ ///
+ [HttpGet("Resources")]
+ public virtual async Task>> GetResources(
+ [FromQuery] string resource
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .GetResources(resource);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Retrieve Specified Resource Items as XResourceDto Presentation ...
+ ///
+ ///
+ ///
+ [HttpGet("AsResource")]
+ public virtual async Task> GetResource(
+ [FromQuery] string resource
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .GetResource(resource);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+ #endregion
+
+ //
+ #region Query ...
+ ///
+ /// Query Resource IDs ...
+ ///
+ ///
+ ///
+ [HttpGet("QueryResourceIds")]
+ public virtual async Task>> QueryResourceIds(
+ [FromQuery] XQuery query
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .QueryResourceIds(query);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Query Specified Language Resources ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("QueryLanguageResources")]
+ public virtual async Task>> QueryLanguageResources(
+ [FromQuery] XQuery query,
+ [FromQuery] string language = null //
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .QueryLanguageResources(
+ query: query,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Query Locale Resources ...
+ ///
+ ///
+ ///
+ ///
+ [HttpGet("QueryLocaleResources")]
+ public virtual async Task>> QueryLocaleResources(
+ [FromQuery] XQuery query,
+ [FromQuery] string language = null //
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .QueryLocaleResources(
+ query: query,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+ #endregion
+
+ //
+ #region Add/Update Actions ...
+ ///
+ /// Add Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Add")]
+ public virtual async Task> Add(
+ [FromQuery] string resource,
+ [FromQuery] string value,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .Add(
+ value: value,
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Update Resource ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Update")]
+ public virtual async Task> Update(
+ [FromQuery] string resource,
+ [FromQuery] string value,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .Update(
+ value: value,
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Add Or Update Resource ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("AddOrUpdate")]
+ public virtual async Task> AddOrUpdate(
+ [FromQuery] string resource,
+ [FromQuery] string value,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .AddOrUpdate(
+ value: value,
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Add Specified Resource ...
+ ///
+ ///
+ ///
+ [HttpPost("AddModel")]
+ public virtual async Task> AddEntity(
+ [FromBody] XStringDto item
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider.AddEntity(item);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Update Specified Entity ...
+ ///
+ ///
+ ///
+ [HttpPost("UpdateModel")]
+ public virtual async Task> UpdateEntity(
+ [FromBody] XStringDto item
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .UpdateEntity(item);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Add Or Update Specified Entitiy ...
+ ///
+ ///
+ ///
+ [HttpPost("AddOrUpdateModel")]
+ public virtual async Task> AddOrUpdateEntity(
+ [FromBody] XStringDto item
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .AddOrUpdateEntity(item);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Add Specified Locale Resource ...
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("AddLocale")]
+ public virtual async Task> AddByLocaleResource(
+ [FromBody] XLocaleResourceDto item,
+ [FromQuery] string resource
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .AddByLocaleResource(
+ item: item,
+ resource: resource
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Update Specified Locale Resource ...
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("UpdateLocale")]
+ public virtual async Task> UpdateByLocaleResource(
+ [FromBody] XLocaleResourceDto item,
+ [FromQuery] string resource
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .UpdateByLocaleResource(
+ item: item,
+ resource: resource
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Add Or Update Resource By Locale ...
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("AddOrUpdateLocale")]
+ public virtual async Task> AddOrUpdateByLocaleResource(
+ [FromBody] XLocaleResourceDto item,
+ [FromQuery] string resource
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .AddOrUpdateByLocaleResource(
+ item: item,
+ resource: resource
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Add Or Update all XResourceDto(s) Locales ...
+ ///
+ ///
+ ///
+ [HttpPost("AddResource")]
+ public virtual async Task>> AddByResource(
+ [FromBody] XResourceDto item
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .AddByResource(item);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+ #endregion
+
+ //
+ #region Remove Actions ...
+ ///
+ /// Remove all Specified Language's Resources ...
+ ///
+ ///
+ ///
+ [HttpDelete("RemoveLanguage")]
+ public virtual async Task RemoveLanguageResources(
+ [FromQuery] string language
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ await StringProvider
+ .RemoveLanguageResources(language);
+
+ //
+ return Ok();
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Remove all Specified Resource Ids instances ...
+ ///
+ ///
+ ///
+ [HttpDelete("RemoveLocales")]
+ public virtual async Task>> RemoveResource(
+ [FromQuery] string resource
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .RemoveResource(resource);
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Remove Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ [HttpDelete("Remove")]
+ public virtual async Task> Remove(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ var result = await StringProvider
+ .Remove(
+ resource: resource,
+ language: language
+ );
+
+ //
+ return Ok(result.
+ ToDynamicObject());
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+
+ ///
+ /// Remove all Resource of Specified XResourceDto ...
+ ///
+ ///
+ ///
+ [HttpDelete("RemoveResource")]
+ public virtual async Task RemoveByResource(
+ [FromBody] XResourceDto item
+ )
+ {
+ //
+ // Do ...
+ try
+ {
+ //
+ await StringProvider
+ .RemoveByResource(item);
+
+ //
+ return Ok();
+ }
+ catch (Exception ex)
+ {
+ //
+ var result = GetExceptionActionResult(ex);
+ return result;
+ }
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Interfaces/IXStringServiceControllerActions.cs b/Interfaces/IXStringServiceControllerActions.cs
new file mode 100644
index 0000000..522e3b7
--- /dev/null
+++ b/Interfaces/IXStringServiceControllerActions.cs
@@ -0,0 +1,257 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using xModels.Dtos;
+using xStringService.Models.Dtos;
+
+namespace xStringService.Interfaces
+{
+ public interface IXStringServiceControllerActions
+ {
+ //
+ #region Retrievers ...
+ ///
+ /// Retrieve all Exists Languages ...
+ ///
+ ///
+ Task>> GetLanguages();
+
+ ///
+ /// Check Specified Resource Exists or not ...
+ ///
+ ///
+ ///
+ ///
+ Task> IsResourceExists(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Retrieve Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ Task> Get(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Retrieve Specified Translation of Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ Task> GetResourceValue(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Retrieve an Specified Resource Items ...
+ ///
+ ///
+ ///
+ Task>> GetResources(
+ [FromQuery] string resource
+ );
+
+ ///
+ /// Retrieve Specified Resource Items as XResourceDto Presentation ...
+ ///
+ ///
+ ///
+ Task> GetResource(
+ [FromQuery] string resource
+ );
+ #endregion
+
+ //
+ #region Query ...
+ ///
+ /// Query Resource IDs ...
+ ///
+ ///
+ ///
+ Task>> QueryResourceIds(
+ [FromQuery] XQuery query
+ );
+
+ ///
+ /// Query Specified Language Resources ...
+ ///
+ ///
+ ///
+ ///
+ Task>> QueryLanguageResources(
+ [FromQuery] XQuery query,
+ [FromQuery] string language = null //
+ );
+
+ ///
+ /// Query Locale Resources ...
+ ///
+ ///
+ ///
+ ///
+ Task>> QueryLocaleResources(
+ [FromQuery] XQuery query,
+ [FromQuery] string language = null //
+ );
+ #endregion
+
+ //
+ #region Add/Update Actions ...
+ ///
+ /// Add Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> Add(
+ [FromQuery] string resource,
+ [FromQuery] string value,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Update Resource ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> Update(
+ [FromQuery] string resource,
+ [FromQuery] string value,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Add Or Update Resource ...
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> AddOrUpdate(
+ [FromQuery] string resource,
+ [FromQuery] string value,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Add Specified Resource ...
+ ///
+ ///
+ ///
+ Task> AddEntity(
+ [FromBody] XStringDto item
+ );
+
+ ///
+ /// Update Specified Entity ...
+ ///
+ ///
+ ///
+ Task> UpdateEntity(
+ [FromBody] XStringDto item
+ );
+
+ ///
+ /// Add Or Update Specified Entitiy ...
+ ///
+ ///
+ ///
+ Task> AddOrUpdateEntity(
+ [FromBody] XStringDto item
+ );
+
+ ///
+ /// Add Specified Locale Resource ...
+ ///
+ ///
+ ///
+ ///
+ Task> AddByLocaleResource(
+ [FromBody] XLocaleResourceDto item,
+ [FromQuery] string resource
+ );
+
+ ///
+ /// Update Specified Locale Resource ...
+ ///
+ ///
+ ///
+ ///
+ Task> UpdateByLocaleResource(
+ [FromBody] XLocaleResourceDto item,
+ [FromQuery] string resource
+ );
+
+ ///
+ /// Add Or Update Resource By Locale ...
+ ///
+ ///
+ ///
+ ///
+ Task> AddOrUpdateByLocaleResource(
+ [FromBody] XLocaleResourceDto item,
+ [FromQuery] string resource
+ );
+
+ ///
+ /// Add Or Update all XResourceDto(s) Locales ...
+ ///
+ ///
+ ///
+ Task>> AddByResource(
+ [FromBody] XResourceDto item
+ );
+ #endregion
+
+ //
+ #region Remove Actions ...
+ ///
+ /// Remove all Specified Language's Resources ...
+ ///
+ ///
+ ///
+ Task RemoveLanguageResources(
+ [FromQuery] string language
+ );
+
+ ///
+ /// Remove all Specified Resource Ids instances ...
+ ///
+ ///
+ ///
+ Task>> RemoveResource(
+ [FromQuery] string resource
+ );
+
+ ///
+ /// Remove Specified Resource ...
+ ///
+ ///
+ ///
+ ///
+ Task> Remove(
+ [FromQuery] string resource,
+ [FromQuery] string language = null
+ );
+
+ ///
+ /// Remove all Resource of Specified XResourceDto ...
+ ///
+ ///
+ ///
+ Task RemoveByResource(
+ [FromBody] XResourceDto item
+ );
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/xStringService.csproj b/xStringService.csproj
index 12e5792..5e3d087 100644
--- a/xStringService.csproj
+++ b/xStringService.csproj
@@ -24,6 +24,7 @@
+