From 5d9cd2afbeebae17438f7d30178df0e5d1786547 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sun, 6 Sep 2026 00:18:57 +0330 Subject: [PATCH] apply sorting ... --- .../Entities/XContentEntityConfiguration.cs | 8 +- .../XControllerProviderControllerBase.cs | 86 +++++++++++++++++-- Helpers/XContentServiceHelper.cs | 8 +- .../IXContentProviderController.cs | 17 +++- Interfaces/Dtos/IXContentDtoHub.cs | 2 +- Interfaces/Dtos/IXContentServiceProvider.cs | 6 +- Interfaces/Entities/IXContentEntityHub.cs | 2 +- .../Entities/IXContentGraphQLTypeHelper.cs | 2 +- Interfaces/Entities/IXContentKeyGenerator.cs | 2 +- Interfaces/Entities/IXContentRepository.cs | 2 +- .../Entities/IXContentRepositoryEvents.cs | 2 +- .../Entities/IXContentRepositoryProvider.cs | 2 +- Interfaces/Entities/IXContentSeeder.cs | 2 +- Providers/Dtos/XContentDtoHub.cs | 4 +- Providers/Dtos/XContentServiceProvider.cs | 8 +- Providers/Entities/XContentEFRepository.cs | 8 +- Providers/Entities/XContentEntityHub.cs | 6 +- .../Entities/XContentInMemoryRepository.cs | 6 +- Providers/Entities/XContentKeyGenerator.cs | 4 +- Providers/Entities/XContentMongoRepository.cs | 6 +- .../Entities/XContentRepositoryEvents.cs | 4 +- .../Entities/XContentRepositoryProvider.cs | 8 +- Providers/Entities/XContentSeederBase.cs | 6 +- .../GraphQL/XContentGraphQLTypeHelper.cs | 6 +- Providers/GraphQL/XContentGraphQuery.cs | 6 +- Providers/GraphQL/XContentGraphType.cs | 2 +- Providers/XContentEntityRegisterar.cs | 8 +- Providers/XContentProvider.cs | 4 + 28 files changed, 159 insertions(+), 68 deletions(-) diff --git a/Configuration/Entities/XContentEntityConfiguration.cs b/Configuration/Entities/XContentEntityConfiguration.cs index d830382..10be588 100644 --- a/Configuration/Entities/XContentEntityConfiguration.cs +++ b/Configuration/Entities/XContentEntityConfiguration.cs @@ -1,9 +1,9 @@ using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using xContentService.Constants; -using xContentService.Models.Entities; using xDataService.Providers; +using xContentService.Constants; +using Microsoft.EntityFrameworkCore; +using xContentService.Models.Entities; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace xContentService.Configuration.Entities { diff --git a/Controllers/XControllerProviderControllerBase.cs b/Controllers/XControllerProviderControllerBase.cs index 7efaae5..2755983 100644 --- a/Controllers/XControllerProviderControllerBase.cs +++ b/Controllers/XControllerProviderControllerBase.cs @@ -1,10 +1,14 @@ using System; using System.Linq; +using System.Threading; using xCommons.Providers; -using xTagService.Interfaces; +using xCommons.Extensions; +using xExceptions.Constants; +using System.Threading.Tasks; using xCommons.Configurations; -using xPushService.Interfaces; using xTagService.Controllers; +using Microsoft.AspNetCore.Mvc; +using xContentService.Interfaces; using xContentService.Models.Dtos; using xIdentityService.Interfaces; using Microsoft.Extensions.Logging; @@ -15,15 +19,17 @@ using xContentService.Interfaces.Controllers; namespace xContentService.Controllers { - public abstract class XControllerProviderControllerBase : XBaseProvidedHasTagControllerBase, IXContentProviderController + public abstract class XContentProviderControllerBase : XBaseProvidedHasTagControllerBase, IXContentProviderController { - protected XControllerProviderControllerBase( + private readonly IXContentProvider provider; + + protected XContentProviderControllerBase( ILogger> logger, XAppConfiguration appConfiguration, IXIdentityProvider identityProvider, XValidationProvider validationProvider, - IXBaseProvided provider, - IXTagProvided tagProvided, + IXContentProvider provider, + IXContentTagProvided tagProvided, Func, IOrderedQueryable> defaultOrderBuilder = null, Func, IIncludableQueryable> defaultIncludeBuilder = null ) : base( @@ -36,6 +42,72 @@ namespace xContentService.Controllers defaultOrderBuilder, defaultIncludeBuilder ) - { } + { + this.provider = provider; + } + + /// + /// Add an item ... + /// + /// + /// + /// + /// + [HttpPost("Add")] + public async Task> Add( + [FromBody] XContentDto item, + [FromQuery] string language = null, + CancellationToken cancellationToken = default + ) + { + // + try + { + // + // Validate ... + if (!ModelState.IsValid) + { + XException.InvalidArgs.Throw(); + } + await ValidationProvider + .GroupValidationBuilder() + .AddNotNull(item) + .AddNotEmpty(item.Title) + .ValidateGroupAsync(); + + // + var userInfo = await GetUserInfo(); + var connectionId = GetConnectionId(); + + // + // Normalize Language ... + if (language.IsNullOrEmpty()) + { + language = AppConfiguration.DefaultLanguage; + } + if (language.IsNullOrEmpty()) + { + XException.InvalidData.Throw(); + } + + // + var result = await provider.Add( + item: item, + userInfo: userInfo, + language: language, + connectionId: connectionId, + cancellationToken: cancellationToken + ); + + // + return result; + } + catch (Exception ex) + { + // + var result = GetExceptionActionResult(ex); + return result; + } + } } } \ No newline at end of file diff --git a/Helpers/XContentServiceHelper.cs b/Helpers/XContentServiceHelper.cs index 39a19c0..5254a7b 100644 --- a/Helpers/XContentServiceHelper.cs +++ b/Helpers/XContentServiceHelper.cs @@ -1,12 +1,12 @@ using System; using GraphQL.Types; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; -using xContentService.Providers.Entities; -using xContentService.Providers.GraphQL; using xDataService.Db; using xDataService.Models; using xDataService.Providers; +using xContentService.Models.Entities; +using xContentService.Providers.GraphQL; +using xContentService.Providers.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Helpers { diff --git a/Interfaces/Controllers/IXContentProviderController.cs b/Interfaces/Controllers/IXContentProviderController.cs index 3f7dc8d..5f848d1 100644 --- a/Interfaces/Controllers/IXContentProviderController.cs +++ b/Interfaces/Controllers/IXContentProviderController.cs @@ -1,5 +1,8 @@ using System; +using System.Threading; using xTagService.Interfaces; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; using xContentService.Models.Dtos; using xContentService.Providers.Dtos; using xContentService.Models.Entities; @@ -8,6 +11,18 @@ namespace xContentService.Interfaces.Controllers { public interface IXContentProviderController : IXBaseProvidedHasTagController { - + /// + /// Add an item ... + /// + /// + /// + /// + /// + [HttpPost("Add")] + Task> Add( + [FromBody] XContentDto item, + [FromQuery] string language = null, + CancellationToken cancellationToken = default + ); } } \ No newline at end of file diff --git a/Interfaces/Dtos/IXContentDtoHub.cs b/Interfaces/Dtos/IXContentDtoHub.cs index 2886f0e..2ee665d 100644 --- a/Interfaces/Dtos/IXContentDtoHub.cs +++ b/Interfaces/Dtos/IXContentDtoHub.cs @@ -1,7 +1,7 @@ using System; +using xPushService.Interfaces; using xContentService.Models.Dtos; using xContentService.Models.Entities; -using xPushService.Interfaces; namespace xContentService.Interfaces.Dtos { diff --git a/Interfaces/Dtos/IXContentServiceProvider.cs b/Interfaces/Dtos/IXContentServiceProvider.cs index e349266..df1372a 100644 --- a/Interfaces/Dtos/IXContentServiceProvider.cs +++ b/Interfaces/Dtos/IXContentServiceProvider.cs @@ -1,8 +1,8 @@ using System; -using xContentService.Models.Dtos; -using xContentService.Models.Entities; -using xContentService.Providers.Dtos; using xPushService.Interfaces; +using xContentService.Models.Dtos; +using xContentService.Providers.Dtos; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Dtos { diff --git a/Interfaces/Entities/IXContentEntityHub.cs b/Interfaces/Entities/IXContentEntityHub.cs index fee5aa0..cce194b 100644 --- a/Interfaces/Entities/IXContentEntityHub.cs +++ b/Interfaces/Entities/IXContentEntityHub.cs @@ -1,6 +1,6 @@ using System; -using xContentService.Models.Entities; using xPushService.Interfaces; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Entities { diff --git a/Interfaces/Entities/IXContentGraphQLTypeHelper.cs b/Interfaces/Entities/IXContentGraphQLTypeHelper.cs index e6389a9..5fb9ef6 100644 --- a/Interfaces/Entities/IXContentGraphQLTypeHelper.cs +++ b/Interfaces/Entities/IXContentGraphQLTypeHelper.cs @@ -1,6 +1,6 @@ using System; -using xContentService.Models.Entities; using xDataService.Interfaces; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Entities { diff --git a/Interfaces/Entities/IXContentKeyGenerator.cs b/Interfaces/Entities/IXContentKeyGenerator.cs index cb457c5..4ca0007 100644 --- a/Interfaces/Entities/IXContentKeyGenerator.cs +++ b/Interfaces/Entities/IXContentKeyGenerator.cs @@ -1,6 +1,6 @@ using System; -using xContentService.Models.Entities; using xDataService.Interfaces; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Entities { diff --git a/Interfaces/Entities/IXContentRepository.cs b/Interfaces/Entities/IXContentRepository.cs index 7e0882d..681e0cf 100644 --- a/Interfaces/Entities/IXContentRepository.cs +++ b/Interfaces/Entities/IXContentRepository.cs @@ -1,6 +1,6 @@ using System; -using xContentService.Models.Entities; using xDataService.Interfaces; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Entities { diff --git a/Interfaces/Entities/IXContentRepositoryEvents.cs b/Interfaces/Entities/IXContentRepositoryEvents.cs index d4c1ac0..f4608e2 100644 --- a/Interfaces/Entities/IXContentRepositoryEvents.cs +++ b/Interfaces/Entities/IXContentRepositoryEvents.cs @@ -1,5 +1,5 @@ -using xContentService.Models.Entities; using xDataService.Interfaces; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Entities { diff --git a/Interfaces/Entities/IXContentRepositoryProvider.cs b/Interfaces/Entities/IXContentRepositoryProvider.cs index 09477da..2a7ec57 100644 --- a/Interfaces/Entities/IXContentRepositoryProvider.cs +++ b/Interfaces/Entities/IXContentRepositoryProvider.cs @@ -1,7 +1,7 @@ using System; +using xPushService.Interfaces; using xContentService.Models.Entities; using xContentService.Providers.Entities; -using xPushService.Interfaces; namespace xContentService.Interfaces.Entities { diff --git a/Interfaces/Entities/IXContentSeeder.cs b/Interfaces/Entities/IXContentSeeder.cs index 2436270..2a473ba 100644 --- a/Interfaces/Entities/IXContentSeeder.cs +++ b/Interfaces/Entities/IXContentSeeder.cs @@ -1,6 +1,6 @@ using System; -using xContentService.Models.Entities; using xDataService.Interfaces; +using xContentService.Models.Entities; namespace xContentService.Interfaces.Entities { diff --git a/Providers/Dtos/XContentDtoHub.cs b/Providers/Dtos/XContentDtoHub.cs index 87e3720..bc32ff0 100644 --- a/Providers/Dtos/XContentDtoHub.cs +++ b/Providers/Dtos/XContentDtoHub.cs @@ -1,9 +1,9 @@ using System; +using xPushService.Base; +using xContentService.Models.Dtos; using Microsoft.Extensions.Logging; using xContentService.Interfaces.Dtos; -using xContentService.Models.Dtos; using xContentService.Models.Entities; -using xPushService.Base; namespace xContentService.Providers.Dtos { diff --git a/Providers/Dtos/XContentServiceProvider.cs b/Providers/Dtos/XContentServiceProvider.cs index 2227f4c..a07eda2 100644 --- a/Providers/Dtos/XContentServiceProvider.cs +++ b/Providers/Dtos/XContentServiceProvider.cs @@ -1,11 +1,11 @@ using System; +using xPushService.Base; +using xDataService.Configuration; +using xContentService.Models.Dtos; +using xIdentityService.Interfaces; using Microsoft.AspNetCore.SignalR; using xContentService.Interfaces.Dtos; -using xContentService.Models.Dtos; using xContentService.Models.Entities; -using xDataService.Configuration; -using xIdentityService.Interfaces; -using xPushService.Base; namespace xContentService.Providers.Dtos { diff --git a/Providers/Entities/XContentEFRepository.cs b/Providers/Entities/XContentEFRepository.cs index 035912f..6db55d5 100644 --- a/Providers/Entities/XContentEFRepository.cs +++ b/Providers/Entities/XContentEFRepository.cs @@ -1,10 +1,10 @@ using System; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; -using xDataService.Configuration; using xDataService.Db; -using xDataService.Interfaces; using xDataService.Providers; +using xDataService.Interfaces; +using xDataService.Configuration; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentEntityHub.cs b/Providers/Entities/XContentEntityHub.cs index c98516c..0a957b7 100644 --- a/Providers/Entities/XContentEntityHub.cs +++ b/Providers/Entities/XContentEntityHub.cs @@ -1,8 +1,8 @@ using System; -using Microsoft.Extensions.Logging; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; using xPushService.Base; +using Microsoft.Extensions.Logging; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentInMemoryRepository.cs b/Providers/Entities/XContentInMemoryRepository.cs index e05c2af..141fe41 100644 --- a/Providers/Entities/XContentInMemoryRepository.cs +++ b/Providers/Entities/XContentInMemoryRepository.cs @@ -1,8 +1,8 @@ using System; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; -using xDataService.Configuration; using xDataService.Providers; +using xDataService.Configuration; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentKeyGenerator.cs b/Providers/Entities/XContentKeyGenerator.cs index 66aedb1..276884a 100644 --- a/Providers/Entities/XContentKeyGenerator.cs +++ b/Providers/Entities/XContentKeyGenerator.cs @@ -1,6 +1,6 @@ -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; using xDataService.Providers; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentMongoRepository.cs b/Providers/Entities/XContentMongoRepository.cs index f2c21c7..ffac217 100644 --- a/Providers/Entities/XContentMongoRepository.cs +++ b/Providers/Entities/XContentMongoRepository.cs @@ -1,8 +1,8 @@ using System; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; -using xDataService.Configuration; using xDataService.Providers; +using xDataService.Configuration; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentRepositoryEvents.cs b/Providers/Entities/XContentRepositoryEvents.cs index 099e8ac..ac9ac27 100644 --- a/Providers/Entities/XContentRepositoryEvents.cs +++ b/Providers/Entities/XContentRepositoryEvents.cs @@ -1,6 +1,6 @@ -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; using xDataService.Providers; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentRepositoryProvider.cs b/Providers/Entities/XContentRepositoryProvider.cs index 1ac7966..e3fd187 100644 --- a/Providers/Entities/XContentRepositoryProvider.cs +++ b/Providers/Entities/XContentRepositoryProvider.cs @@ -1,10 +1,10 @@ using System; -using Microsoft.AspNetCore.SignalR; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; +using xPushService.Base; using xDataService.Configuration; using xIdentityService.Interfaces; -using xPushService.Base; +using Microsoft.AspNetCore.SignalR; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/Entities/XContentSeederBase.cs b/Providers/Entities/XContentSeederBase.cs index ee5012d..2b2cfe3 100644 --- a/Providers/Entities/XContentSeederBase.cs +++ b/Providers/Entities/XContentSeederBase.cs @@ -1,8 +1,8 @@ using System; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; -using xDataService.Configuration; using xDataService.Providers; +using xDataService.Configuration; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.Entities { diff --git a/Providers/GraphQL/XContentGraphQLTypeHelper.cs b/Providers/GraphQL/XContentGraphQLTypeHelper.cs index a3d98b4..d8bffe1 100644 --- a/Providers/GraphQL/XContentGraphQLTypeHelper.cs +++ b/Providers/GraphQL/XContentGraphQLTypeHelper.cs @@ -1,8 +1,8 @@ using System; -using xContentService.Constants; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; using xDataService.GraphQL; +using xContentService.Constants; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.GraphQL { diff --git a/Providers/GraphQL/XContentGraphQuery.cs b/Providers/GraphQL/XContentGraphQuery.cs index a99624f..b92a6dd 100644 --- a/Providers/GraphQL/XContentGraphQuery.cs +++ b/Providers/GraphQL/XContentGraphQuery.cs @@ -1,9 +1,9 @@ using System; using GraphQL.Types; -using xContentService.Interfaces.Entities; -using xContentService.Models.Entities; -using xDataService.Configuration; using xDataService.GraphQL; +using xDataService.Configuration; +using xContentService.Models.Entities; +using xContentService.Interfaces.Entities; namespace xContentService.Providers.GraphQL { diff --git a/Providers/GraphQL/XContentGraphType.cs b/Providers/GraphQL/XContentGraphType.cs index 76c9097..a091b39 100644 --- a/Providers/GraphQL/XContentGraphType.cs +++ b/Providers/GraphQL/XContentGraphType.cs @@ -1,6 +1,6 @@ using System; -using xContentService.Models.Entities; using xDataService.GraphQL; +using xContentService.Models.Entities; namespace xContentService.Providers.GraphQL { diff --git a/Providers/XContentEntityRegisterar.cs b/Providers/XContentEntityRegisterar.cs index caa546b..6731a0a 100644 --- a/Providers/XContentEntityRegisterar.cs +++ b/Providers/XContentEntityRegisterar.cs @@ -1,9 +1,9 @@ using System; -using Microsoft.EntityFrameworkCore; -using xContentService.Configuration.Entities; -using xContentService.Models.Entities; -using xDataService.Interfaces; using xDataService.Providers; +using xDataService.Interfaces; +using Microsoft.EntityFrameworkCore; +using xContentService.Models.Entities; +using xContentService.Configuration.Entities; namespace xContentService.Providers { diff --git a/Providers/XContentProvider.cs b/Providers/XContentProvider.cs index e896cb6..a7c0add 100644 --- a/Providers/XContentProvider.cs +++ b/Providers/XContentProvider.cs @@ -571,6 +571,10 @@ namespace xContentService.Providers ); } + // + // Handle Update on ... + item.UpdatedAt = DateTime.UtcNow; + // var result = await provider.UpdateAsync( id: id,