387 lines
12 KiB
C#
387 lines
12 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// an Implementation of Base Actions of a Controller which Provides
|
|
/// XString Resource Service Actions ...
|
|
/// </summary>
|
|
public abstract class XBaseStringResourceProviderControllerBase : XBaseIdentityApiV1Controller, IXBaseStringResourceProviderControllerBase
|
|
{
|
|
private readonly IXBaseStringResourceProvider resourceProvider;
|
|
|
|
protected XBaseStringResourceProviderControllerBase(
|
|
ILogger<XBaseStringResourceProviderControllerBase> logger,
|
|
XAppConfiguration appConfiguration,
|
|
IXIdentityProvider identityProvider,
|
|
XValidationProvider validationProvider,
|
|
IXBaseStringResourceProvider resourceProvider
|
|
) : base(
|
|
logger,
|
|
appConfiguration,
|
|
identityProvider,
|
|
validationProvider
|
|
)
|
|
{
|
|
this.resourceProvider = resourceProvider;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add Specified Locales ...
|
|
/// </summary>
|
|
/// <param name="suffix"></param>
|
|
/// <param name="locales"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("Add")]
|
|
public virtual async Task<ActionResult<IEnumerable<XStringDto>>> Add(
|
|
[FromQuery] string suffix,
|
|
[FromBody] XBaseRangeRequest<XLocaleResourceDto> 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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add or Update Specified Locales ...
|
|
/// </summary>
|
|
/// <param name="resource"></param>
|
|
/// <param name="locales"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("AddOrUpdate")]
|
|
public virtual async Task<ActionResult<IEnumerable<XStringDto>>> AddOrUpdate(
|
|
[FromQuery] string resource,
|
|
[FromBody] XBaseRangeRequest<XLocaleResourceDto> 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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add Specified Resource ...
|
|
/// </summary>
|
|
/// <param name="suffix"></param>
|
|
/// <param name="item"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("AddResource")]
|
|
public virtual async Task<ActionResult<XResourceDto>> 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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get Specified Locale ...
|
|
/// </summary>
|
|
/// <param name="suffix"></param>
|
|
/// <param name="language"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("GetLocale")]
|
|
public virtual async Task<ActionResult<XLocaleResourceDto>> 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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get Resources of Specified Resource Title ...
|
|
/// </summary>
|
|
/// <param name="suffix"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("GetResource")]
|
|
public virtual async Task<ActionResult<XResourceDto>> 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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove all Resources which belongs to Specified Suffix ...
|
|
/// </summary>
|
|
/// <param name="suffix"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpDelete("Remove")]
|
|
public virtual async Task<ActionResult> 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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove Specified Resource ...
|
|
/// </summary>
|
|
/// <param name="resource"></param>
|
|
/// <param name="language"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
[HttpDelete("RemoveResource")]
|
|
public virtual async Task<ActionResult> 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;
|
|
}
|
|
}
|
|
}
|
|
} |