Compare commits

...
1 Commits
Author SHA1 Message Date
saherelm 85fbc0899d implement Owned Item Resource Provider ... 2026-08-08 18:09:17 +03:30
+370 -14
View File
@@ -3,8 +3,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using xCommons.Configurations;
using xCommons.Extensions;
using xExceptions.Constants;
using xModels.Dtos;
using xStringService.Extensions;
using xStringService.Interfaces;
using xStringService.Interfaces.Dtos;
using xStringService.Models.Dtos;
@@ -20,6 +23,11 @@ namespace xStringService.Providers
/// </summary>
private readonly string item;
/// <summary>
/// Application Configuration ...
/// </summary>
private readonly XAppConfiguration appConfig;
/// <summary>
/// String Provider Service ...
/// </summary>
@@ -30,11 +38,13 @@ namespace xStringService.Providers
#region Constructor ...
protected XBaseOwnedItemResourceProvider(
string item,
XAppConfiguration appConfig,
IXStringServiceProvider stringProvider
)
{
//
this.item = item;
this.appConfig = appConfig;
this.stringProvider = stringProvider;
}
#endregion
@@ -52,7 +62,19 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var items = await ExtractStrings(
owner: owner,
identifier: null,
cancellationToken: cancellationToken
);
var result =
items
.Select(x => x.Language)
.Distinct();
//
return result;
}
/// <summary>
@@ -66,7 +88,15 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var result = await ExtractStrings(
owner: owner,
identifier: null,
cancellationToken: cancellationToken
);
//
return result;
}
/// <summary>
@@ -82,7 +112,38 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var items = await ExtractStrings(
owner: owner,
identifier: null,
cancellationToken: cancellationToken
);
//
foreach (var item in items)
{
//
// Check Cancellation Token ...
if (cancellationToken.IsCancellationRequested)
{
break;
}
//
// Try to Remove it ...
try
{
//
await stringProvider.RemoveAsync(
id: item.Id,
softDelete: false,
saveChanges: true,
connectionId: connectionId,
cancellationToken: cancellationToken
);
}
catch { }
}
}
#endregion
@@ -101,7 +162,24 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var resourceTitle = GetResourceTitle(
owner: owner,
identifier: identifier
);
//
var result = await stringProvider.FindManyAsync(
includeBuilder: null,
ignoreSoftDeleteds: true,
cancellationToken: cancellationToken,
predicate: x => x.ResourceTitle
.ToNormalString()
.Contains(resourceTitle.ToNormalString())
);
//
return result;
}
/// <summary>
@@ -117,7 +195,16 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var result = (await GetResourceLocales(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
))
.Select(x => x.ToXLocaleResourceDto());
//
return result;
}
/// <summary>
@@ -134,7 +221,25 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var resource = GetResourceTitle(
owner: owner
);
var locales = await GetLocales(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
//
var result = new XResourceDto
{
Locales = locales,
Resource = resource
};
//
return result;
}
/// <summary>
@@ -154,7 +259,30 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var resource = GetResourceTitle(
owner: owner,
identifier: identifier
);
//
var resourceDto = await stringProvider.AddOrUpdateByLocaleResource(
item: locale,
resource: resource,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
// Retrieve XResourceDto ...
var result = await GetResource(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
//
return result;
}
/// <summary>
@@ -174,7 +302,70 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var resourceTitle = GetResourceTitle(
owner: owner,
identifier: identifier
);
//
var isValid =
!resource.IsNullOrDefault() &&
resource.Resource == resourceTitle;
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Retrieve Exists Resource ...
var result = await GetResource(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
isValid =
!result.IsNullOrDefault() &&
result.Locales.HasChild();
if (isValid)
{
await RemoveLocales(
owner: owner,
identifier: identifier,
connectionId: connectionId,
cancellationToken: cancellationToken
);
}
//
foreach (var locale in resource.Locales)
{
//
var item = new XStringDto
{
Language = locale.Language,
ResourceTitle = resourceTitle,
TranslatedValue = locale.Value,
};
//
await stringProvider.AddAsync(
item: item,
saveChanges: true,
connectionId: connectionId,
cancellationToken: cancellationToken
);
}
//
result = await GetResource(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
//
return result;
}
/// <summary>
@@ -194,7 +385,72 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
XResourceDto result = null;
language = NormalizedLanguage(language);
//
// Check Locale Exists ...
var isValid = await HasLocale(
owner: owner,
language: language,
identifier: identifier,
cancellationToken: cancellationToken
);
if (!isValid)
{
XException.NotFound.Throw();
}
//
var resourceTitle = GetResourceTitle(
owner: owner,
identifier: identifier
);
//
var item = await stringProvider.FindOneAsync(
includeBuilder: null,
ignoreSoftDeleteds: true,
cancellationToken: cancellationToken,
predicate: x =>
x.Language.Equals(
language,
StringComparison.InvariantCultureIgnoreCase) &&
x.ResourceTitle.Equals(
resourceTitle,
StringComparison.InvariantCultureIgnoreCase)
);
isValid = !item.IsNullOrDefault();
if (!isValid)
{
XException.NotFound.Throw();
}
//
// Remove XStringDto ...
await stringProvider.RemoveAsync(
id: item.Id,
softDelete: false,
saveChanges: true,
connectionId: connectionId,
cancellationToken: cancellationToken
);
//
try
{
//
result = await GetResource(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
}
catch { }
//
return result;
}
/// <summary>
@@ -212,7 +468,34 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var resourceTitle = GetResourceTitle(
owner: owner,
identifier: identifier
);
//
var items = await stringProvider.FindManyAsync(
includeBuilder: null,
ignoreSoftDeleteds: true,
cancellationToken: cancellationToken,
predicate: x =>
x.ResourceTitle.Equals(
resourceTitle,
StringComparison.InvariantCultureIgnoreCase)
);
var isValid = !item.IsNull();
if (!isValid)
{
XException.NotFound.Throw();
}
//
await stringProvider.RemoveResource(
resource: resourceTitle,
connectionId: connectionId,
cancellationToken: cancellationToken
);
}
/// <summary>
@@ -230,7 +513,22 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
language = NormalizedLanguage(language);
var locales = await GetLocales(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
var result =
language.HasChild() &&
locales.Any(l => l.Language.Equals(
language,
StringComparison.InvariantCultureIgnoreCase)
);
//
return result;
}
/// <summary>
@@ -246,7 +544,19 @@ namespace xStringService.Providers
CancellationToken cancellationToken = default
)
{
throw new NotImplementedException();
//
var items = await ExtractStrings(
owner: owner,
identifier: identifier,
cancellationToken: cancellationToken
);
var result =
items
.Select(x => x.Language)
.Distinct();
//
return result;
}
#endregion
@@ -298,6 +608,30 @@ namespace xStringService.Providers
//
#region Private ...
private string NormalizedLanguage(
string language = null
)
{
//
var result = language;
if (result.IsNullOrEmpty())
{
result = GetDefaultLanguage();
}
//
return result;
}
private string GetDefaultLanguage()
{
//
var result = appConfig.DefaultLanguage;
//
return result;
}
private async Task<IEnumerable<XStringDto>> ExtractStrings(
string resourceTitle,
CancellationToken cancellationToken = default
@@ -317,10 +651,32 @@ namespace xStringService.Providers
includeBuilder: null,
ignoreSoftDeleteds: true,
cancellationToken: cancellationToken,
orderBuilder: x => x.OrderBy(y => y.Id),
predicate: x => x.ResourceTitle
.ToNormalString()
.Contains(resourceTitle),
orderBuilder: x => x.OrderBy(y => y.Id)
.Contains(resourceTitle.ToNormalString())
);
//
return result;
}
private async Task<IEnumerable<XStringDto>> ExtractStrings(
object owner,
object identifier,
CancellationToken cancellationToken = default
)
{
//
var resourceTitle = GetResourceTitle(
owner: owner,
identifier: identifier
);
//
var result = await ExtractStrings(
resourceTitle: resourceTitle,
cancellationToken: cancellationToken
);
//