From 89b848709fb24074f4880e461a00896869e2fbaf Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Sat, 15 Aug 2026 14:42:21 +0330 Subject: [PATCH] apply fix on Models Enrichments ... --- .../Dtos/IXAiConversationRepositoryService.cs | 198 +--- .../Dtos/IXAiMessageRepositoryService.cs | 52 +- .../Dtos/IXAiProjectRepositoryService.cs | 218 +---- .../Enrichers/IXAiConversationEnricher.cs | 51 +- Interfaces/Enrichers/IXAiMessageEnricher.cs | 56 +- Interfaces/Enrichers/IXAiProjectEnricher.cs | 74 +- .../Dtos/XAiConversationRepositoryService.cs | 790 ++------------- Providers/Dtos/XAiMessageRepositoryService.cs | 446 ++------- Providers/Dtos/XAiProjectRepositoryService.cs | 920 ++++-------------- .../Enrichers/XAiConversationEnricher.cs | 323 +++--- Providers/Enrichers/XAiMessageEnricher.cs | 211 ++-- Providers/Enrichers/XAiProjectEnricher.cs | 449 +++++---- Providers/XAiDataProvider.cs | 31 +- 13 files changed, 1093 insertions(+), 2726 deletions(-) diff --git a/Interfaces/Dtos/IXAiConversationRepositoryService.cs b/Interfaces/Dtos/IXAiConversationRepositoryService.cs index 0fc49d4..c54a9b6 100644 --- a/Interfaces/Dtos/IXAiConversationRepositoryService.cs +++ b/Interfaces/Dtos/IXAiConversationRepositoryService.cs @@ -1,222 +1,68 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Query; using xAiModels.Models.Dtos; using xAiModels.Models.Entities; using xDataService.Interfaces; -using xModels.Dtos; namespace xAiModels.Interfaces.Dtos { public interface IXAiConversationRepositoryService : IXBaseRepositoryService { // - #region Actions ... - // - #region Add ... + #region Enrichers ... /// - /// add a new Dto ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// - Task AddAsync( - XAiConversationDto item, - bool saveChanges = true, - bool fillMessages = true, + Task Enrich( + XAiConversation source, + bool fillMessages = false, CancellationToken cancellationToken = default ); /// - /// add or update a Dto (add if not exists/update if exists) ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// - Task AddOrUpdateAsync( - XAiConversationDto item, - bool saveChanges = true, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - /// - Task UpdateAsync( - Guid id, - XAiConversationDto item, - bool saveChanges = true, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - Task RemoveAsync( - Guid id, - bool softDelete = false, - bool saveChanges = true, - bool fillMessages = true, + Task Enrich( + XAiConversationDto source, + bool fillMessages = false, CancellationToken cancellationToken = default ); /// - /// remove an Dto ... + /// Enrich Specified Items ... /// - /// - /// - /// + /// /// /// /// - Task RemoveAsync( - XAiConversationDto item, - bool softDelete = false, - bool saveChanges = true, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - - // - #region Retrieve ... - /// - /// retrieve an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, + Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, CancellationToken cancellationToken = default ); /// - /// retrieve all exists Dtos ... + /// Enrich Specified Items ... /// - /// - /// - /// + /// /// /// /// - Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, + Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, CancellationToken cancellationToken = default ); - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - /// - IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - - /// - /// find a collection of Dtos by proving a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - /// - Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - - /// - /// retrieve Dtos based on XQuery Pagination structure ... - /// - /// - /// - /// - /// - /// - /// - /// - /// - Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - #endregion + #endregion } } \ No newline at end of file diff --git a/Interfaces/Dtos/IXAiMessageRepositoryService.cs b/Interfaces/Dtos/IXAiMessageRepositoryService.cs index 6337f3c..cda0050 100644 --- a/Interfaces/Dtos/IXAiMessageRepositoryService.cs +++ b/Interfaces/Dtos/IXAiMessageRepositoryService.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; using xAiModels.Models.Dtos; using xAiModels.Models.Entities; using xDataService.Interfaces; @@ -6,5 +9,52 @@ using xDataService.Interfaces; namespace xAiModels.Interfaces.Dtos { public interface IXAiMessageRepositoryService : IXBaseRepositoryService - { } + { + // + #region Enrichers ... + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + Task Enrich( + XAiMessage source, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + Task Enrich( + XAiMessageDto source, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + CancellationToken cancellationToken = default + ); + #endregion + } } \ No newline at end of file diff --git a/Interfaces/Dtos/IXAiProjectRepositoryService.cs b/Interfaces/Dtos/IXAiProjectRepositoryService.cs index adb5c63..6d70920 100644 --- a/Interfaces/Dtos/IXAiProjectRepositoryService.cs +++ b/Interfaces/Dtos/IXAiProjectRepositoryService.cs @@ -1,244 +1,76 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Query; using xAiModels.Models.Dtos; using xAiModels.Models.Entities; using xDataService.Interfaces; -using xModels.Dtos; namespace xAiModels.Interfaces.Dtos { public interface IXAiProjectRepositoryService : IXBaseRepositoryService { // - #region Actions ... - // - #region Add ... + #region Enrichers ... /// - /// add a new Dto ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// /// - Task AddAsync( - XAiProjectDto item, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, + Task Enrich( + XAiProject source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ); /// - /// add or update a Dto (add if not exists/update if exists) ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// /// - Task AddOrUpdateAsync( - XAiProjectDto item, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - /// - /// - Task UpdateAsync( - Guid id, - XAiProjectDto item, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - /// - Task RemoveAsync( - Guid id, - bool softDelete = false, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, + Task Enrich( + XAiProjectDto source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ); /// - /// remove an Dto ... + /// Enrich Specified Items ... /// - /// - /// - /// + /// /// /// /// /// - Task RemoveAsync( - XAiProjectDto item, - bool softDelete = false, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - #endregion - - // - #region Retrieve ... - /// - /// retrieve an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - /// - Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, + Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ); /// - /// retrieve all exists Dtos ... + /// Enrich Specified Items ... /// - /// - /// - /// + /// /// /// /// /// - Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, + Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ); - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - /// - /// - IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - /// - Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - - /// - /// find a collection of Dtos by proving a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - /// - /// - Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - - /// - /// retrieve Dtos based on XQuery Pagination structure ... - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ); - #endregion #endregion } } \ No newline at end of file diff --git a/Interfaces/Enrichers/IXAiConversationEnricher.cs b/Interfaces/Enrichers/IXAiConversationEnricher.cs index 33ab43b..7f9a6c5 100644 --- a/Interfaces/Enrichers/IXAiConversationEnricher.cs +++ b/Interfaces/Enrichers/IXAiConversationEnricher.cs @@ -2,43 +2,68 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using xAiModels.Models.Dtos; -using xDataService.Interfaces; +using xAiModels.Models.Entities; namespace xAiModels.Interfaces.Enrichers { /// /// Ai Conversation Enricher ... /// - public interface IXAiConversationEnricher : IXBaseEnricher + public interface IXAiConversationEnricher { + // + #region Enrichers ... /// - /// Converts a Signle Entity to Dto ... + /// Enrich Specified Item ... /// /// - /// /// /// /// - Task EnrichAsync( - XAiConversationDto source, - XAiConversationDto destination, + Task Enrich( + XAiConversation source, bool fillMessages = false, CancellationToken cancellationToken = default ); /// - /// Converts a Collection of Entities to Dtos ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// - Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, + Task Enrich( + XAiConversationDto source, bool fillMessages = false, CancellationToken cancellationToken = default ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, + CancellationToken cancellationToken = default + ); + #endregion } } \ No newline at end of file diff --git a/Interfaces/Enrichers/IXAiMessageEnricher.cs b/Interfaces/Enrichers/IXAiMessageEnricher.cs index 2cb4d4d..cd6f146 100644 --- a/Interfaces/Enrichers/IXAiMessageEnricher.cs +++ b/Interfaces/Enrichers/IXAiMessageEnricher.cs @@ -1,8 +1,58 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; using xAiModels.Models.Dtos; -using xDataService.Interfaces; +using xAiModels.Models.Entities; namespace xAiModels.Interfaces.Enrichers { - public interface IXAiMessageEnricher : IXBaseEnricher - { } + public interface IXAiMessageEnricher + { + // + #region Enrichers ... + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + Task Enrich( + XAiMessage source, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + Task Enrich( + XAiMessageDto source, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + CancellationToken cancellationToken = default + ); + #endregion + } } \ No newline at end of file diff --git a/Interfaces/Enrichers/IXAiProjectEnricher.cs b/Interfaces/Enrichers/IXAiProjectEnricher.cs index 0a3e379..a08c796 100644 --- a/Interfaces/Enrichers/IXAiProjectEnricher.cs +++ b/Interfaces/Enrichers/IXAiProjectEnricher.cs @@ -2,27 +2,73 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using xAiModels.Models.Dtos; -using xDataService.Interfaces; +using xAiModels.Models.Entities; namespace xAiModels.Interfaces.Enrichers { - public interface IXAiProjectEnricher : IXBaseEnricher + public interface IXAiProjectEnricher { - - Task EnrichAsync( - XAiProjectDto source, - XAiProjectDto destination, - bool fillConversations = true, - bool fillConversationMessages = true, + // + #region Enrichers ... + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + /// + /// + Task Enrich( + XAiProject source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ); - Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, - bool fillConversations = true, - bool fillConversationMessages = true, + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + /// + /// + Task Enrich( + XAiProjectDto source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default - ); + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, + CancellationToken cancellationToken = default + ); + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + /// + /// + Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, + CancellationToken cancellationToken = default + ); + #endregion } } \ No newline at end of file diff --git a/Providers/Dtos/XAiConversationRepositoryService.cs b/Providers/Dtos/XAiConversationRepositoryService.cs index 6b19778..c3cc359 100644 --- a/Providers/Dtos/XAiConversationRepositoryService.cs +++ b/Providers/Dtos/XAiConversationRepositoryService.cs @@ -1,30 +1,36 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; -using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Query; using xAiModels.Configurations; using xAiModels.Interfaces.Dtos; -using xAiModels.Interfaces.Enrichers; using xAiModels.Interfaces.Entities; using xAiModels.Models.Dtos; using xAiModels.Models.Entities; using xCommons.Extensions; using xDataService.Providers; +using xIdentityService.Interfaces; +using xIdentityService.Extensions; using xModels.Dtos; +using xAiModels.Interfaces; namespace xAiModels.Providers.Dtos { public class XAiConversationRepositoryService : XBaseRepositoryService, IXAiConversationRepositoryService { - private readonly IXAiConversationEnricher enricher; + private readonly IXIdentityProvider identityProvider; + private readonly IXAiConversationRepository repository; + private readonly IXAiProjectTitleResourceProvider projectTitleResourceProvider; + private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; + private readonly IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider; public XAiConversationRepositoryService( - IXAiConversationEnricher enricher, - IXAiConversationRepository repository + IXIdentityProvider identityProvider, + IXAiConversationRepository repository, + IXAiProjectTitleResourceProvider projectTitleResourceProvider, + IXAiConversationTitleResourceProvider conversationTitleResourceProvider, + IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider ) : base( repository, mapperProfiles: @@ -33,771 +39,169 @@ namespace xAiModels.Providers.Dtos ] ) { - this.enricher = enricher; + this.repository = repository; + this.identityProvider = identityProvider; + this.projectTitleResourceProvider = projectTitleResourceProvider; + this.conversationTitleResourceProvider = conversationTitleResourceProvider; + this.projectDescriptionResourceProvider = projectDescriptionResourceProvider; } // - #region Actions ... - // - #region Add ... + #region Enrichers ... /// - /// add a new Dto ... + /// Enrich Specified Item ... /// - /// - /// - /// - /// - public override async Task AddAsync( - XAiConversationDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await AddAsync( - item: item, - fillMessages: false, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - } - - /// - /// add or update a Dto (add if not exists/update if exists) ... - /// - /// - /// - /// - /// - public override async Task AddOrUpdateAsync( - XAiConversationDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await AddOrUpdateAsync( - item: item, - fillMessages: false, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - } - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - public override async Task UpdateAsync( - Guid id, - XAiConversationDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await UpdateAsync( - id: id, - item: item, - fillMessages: false, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - } - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - public override async Task RemoveAsync( - Guid id, - bool softDelete = true, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await RemoveAsync( - id: id, - fillMessages: false, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - } - - /// - /// remove an Dto ... - /// - /// - /// - /// - /// - /// - public override async Task RemoveAsync( - XAiConversationDto item, - bool softDelete = true, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await RemoveAsync( - item: item, - fillMessages: false, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - } - #endregion - - // - #region Retrieve ... - /// - /// retrieve an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - public override async Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await GetAsync( - id: id, - fillMessages: false, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// retrieve all exists Dtos ... - /// - /// - /// - /// - /// - /// - public override async Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await GetAllAsync( - fillMessages: false, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - public override IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return GetAllAsAsyncEnumerable( - fillMessages: false, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - public override async Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await FindOneAsync( - fillMessages: false, - predicate: predicate, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// find a collection of Dtos by proving a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - public override async Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await FindManyAsync( - fillMessages: false, - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// retrieve Dtos based on XQuery Pagination structure ... - /// - /// - /// - /// - /// - /// - /// - /// - public override async Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await QueryAsync( - query: query, - fillMessages: false, - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - #endregion - #endregion - - // - #region Actions ... - // - #region Add ... - /// - /// add a new Dto ... - /// - /// - /// + /// /// /// /// - public virtual async Task AddAsync( - XAiConversationDto item, - bool saveChanges = true, - bool fillMessages = true, + public virtual async Task Enrich( + XAiConversation source, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.AddAsync( - item: item, - saveChanges: saveChanges, + // Mapping Default ... + var result = Mapper.Map(source); + result = await Enrich( + source: result, + fillMessages: fillMessages, cancellationToken: cancellationToken ); - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - } - // return result; } /// - /// add or update a Dto (add if not exists/update if exists) ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// - public virtual async Task AddOrUpdateAsync( - XAiConversationDto item, - bool saveChanges = true, - bool fillMessages = true, + public virtual async Task Enrich( + XAiConversationDto source, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.AddAsync( - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Handdle Owner ... + XPersonDto owner = null; + if (!source.OwnerId.IsNullOrEmpty()) { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillMessages: fillMessages, + // Try to Retrieve User Info ... + var device = identityProvider.GetDevice(); + var userInfo = await identityProvider.GetUserInfo( + device: device, + userSelectByParam: source.OwnerId + ); + owner = userInfo.ToXPersonDto(); + } + + // + // Handle Title Resource ... + XResourceDto titleResource = null; + if (!source.Title.IsNullOrEmpty()) + { + // + titleResource = await conversationTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.Id, cancellationToken: cancellationToken ); } // - return result; - } - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - /// - public virtual async Task UpdateAsync( - Guid id, - XAiConversationDto item, - bool saveChanges = true, - bool fillMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.UpdateAsync( - id: id, - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Handle Project Info ... + XResourceDto projectTitleResource = null; + XResourceDto projectDescriptionResource = null; + if (!source.ProjectId.IsDefaultGuid()) { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillMessages: fillMessages, + projectTitleResource = await projectTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.ProjectId, + cancellationToken: cancellationToken + ); + + // + projectDescriptionResource = await projectDescriptionResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.ProjectId, cancellationToken: cancellationToken ); } // - return result; - } - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - public virtual async Task RemoveAsync( - Guid id, - bool softDelete = true, - bool saveChanges = true, - bool fillMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.RemoveAsync( - id: id, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Attach Extracted Items ... + var result = Mapper.Map(source, options => { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - } + options.Items[nameof(source.Owner)] = owner; + options.Items[nameof(source.TitleResource)] = titleResource; + options.Items[nameof(source.ProjectTitleResource)] = projectTitleResource; + options.Items[nameof(source.ProjectDescriptionResource)] = projectDescriptionResource; + }); // return result; } /// - /// remove an Dto ... + /// Enrich Specified Items ... /// - /// - /// - /// + /// /// /// /// - public virtual async Task RemoveAsync( - XAiConversationDto item, - bool softDelete = true, - bool saveChanges = true, - bool fillMessages = true, + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.RemoveAsync( - item: item, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, + var tasks = sources + .Select(x => Enrich( + source: x, fillMessages: fillMessages, cancellationToken: cancellationToken - ); - } + )); // + var result = await Task.WhenAll(tasks); return result; } - #endregion - // - #region Retrieve ... /// - /// retrieve an Dto by it's Id ... + /// Enrich Specified Items ... /// - /// - /// - /// + /// /// /// /// - public virtual async Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.GetAsync( - id: id, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, + var tasks = sources + .Select(x => Enrich( + source: x, fillMessages: fillMessages, cancellationToken: cancellationToken - ); - } + )); // + var result = await Task.WhenAll(tasks); return result; } - - /// - /// retrieve all exists Dtos ... - /// - /// - /// - /// - /// - /// - /// - public virtual async Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.GetAllAsync( - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result, - destinations: result, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - /// - public virtual async IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) - { - // - var enumerable = base.GetAllAsAsyncEnumerable( - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - await foreach (var dto in enumerable) - { - // - if (cancellationToken.IsCancellationRequested) - { - yield break; - } - - // - await enricher.EnrichAsync( - source: dto, - destination: dto, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - yield return dto; - } - } - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - public virtual async Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.FindOneAsync( - predicate: predicate, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - - /// - /// find a collection of Dtos by proving a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.FindManyAsync( - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result, - destinations: result, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - - /// - /// retrieve Dtos based on XQuery Pagination structure ... - /// - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.QueryAsync( - query: query, - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result.Items, - destinations: result.Items, - fillMessages: fillMessages, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - #endregion - #endregion + #endregion } } \ No newline at end of file diff --git a/Providers/Dtos/XAiMessageRepositoryService.cs b/Providers/Dtos/XAiMessageRepositoryService.cs index 7723416..5636a5a 100644 --- a/Providers/Dtos/XAiMessageRepositoryService.cs +++ b/Providers/Dtos/XAiMessageRepositoryService.cs @@ -1,30 +1,31 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Query; using xAiModels.Configurations; using xAiModels.Interfaces.Dtos; -using xAiModels.Interfaces.Enrichers; using xAiModels.Interfaces.Entities; using xAiModels.Models.Dtos; using xAiModels.Models.Entities; using xCommons.Extensions; using xDataService.Providers; +using xIdentityService.Interfaces; using xModels.Dtos; +using xIdentityService.Extensions; +using xAiModels.Interfaces; +using System.Linq; namespace xAiModels.Providers.Dtos { public class XAiMessageRepositoryService : XBaseRepositoryService, IXAiMessageRepositoryService { - private readonly IXAiMessageEnricher enricher; + private readonly IXIdentityProvider identityProvider; + private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; public XAiMessageRepositoryService( - IXAiMessageEnricher enricher, - IXAiMessageRepository repository + IXAiMessageRepository repository, + IXIdentityProvider identityProvider, + IXAiConversationTitleResourceProvider conversationTitleResourceProvider ) : base( repository, mapperProfiles: @@ -33,455 +34,132 @@ namespace xAiModels.Providers.Dtos ] ) { - this.enricher = enricher; + this.identityProvider = identityProvider; + this.conversationTitleResourceProvider = conversationTitleResourceProvider; } // - #region Actions ... - // - #region Add ... + #region Enrichers ... /// - /// add a new Dto ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// - public override async Task AddAsync( - XAiMessageDto item, - bool saveChanges = true, + public virtual async Task Enrich( + XAiMessage source, CancellationToken cancellationToken = default ) { // - var result = await base.AddAsync( - item: item, - saveChanges: saveChanges, + // Mapping Default ... + var result = Mapper.Map(source); + result = await Enrich( + source: result, cancellationToken: cancellationToken ); - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - cancellationToken: cancellationToken - ); - } - // return result; } /// - /// add or update a Dto (add if not exists/update if exists) ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// - public override async Task AddOrUpdateAsync( - XAiMessageDto item, - bool saveChanges = true, + public virtual async Task Enrich( + XAiMessageDto source, CancellationToken cancellationToken = default ) { // - var result = await base.AddAsync( - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Handdle Owner ... + XPersonDto owner = null; + if (!source.OwnerId.IsNullOrEmpty()) { // - await enricher.EnrichAsync( - source: result, - destination: result, - cancellationToken: cancellationToken + // Try to Retrieve User Info ... + var device = identityProvider.GetDevice(); + var userInfo = await identityProvider.GetUserInfo( + device: device, + userSelectByParam: source.OwnerId ); + owner = userInfo.ToXPersonDto(); } // - return result; - } - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - public override async Task UpdateAsync( - Guid id, - XAiMessageDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.UpdateAsync( - id: id, - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Hanlde Conversation Title ... + string conversationTitle = string.Empty; + XResourceDto conversationTitleResource = null; + if (!source.ConversationId.IsDefaultGuid()) { // - await enricher.EnrichAsync( - source: result, - destination: result, + conversationTitleResource = await conversationTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.ConversationId, cancellationToken: cancellationToken ); - } - - // - return result; - } - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - public override async Task RemoveAsync( - Guid id, - bool softDelete = true, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.RemoveAsync( - id: id, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - - /// - /// remove an Dto ... - /// - /// - /// - /// - /// - /// - public override async Task RemoveAsync( - XAiMessageDto item, - bool softDelete = true, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.RemoveAsync( - item: item, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - #endregion - - // - #region Retrieve ... - /// - /// retrieve an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - public override async Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.GetAsync( - id: id, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - - /// - /// retrieve all exists Dtos ... - /// - /// - /// - /// - /// - /// - public override async Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.GetAllAsync( - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result, - destinations: result, - cancellationToken: cancellationToken - ); - } - - // - return result; - } - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - public override async IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) - { - // - var enumerable = base.GetAllAsAsyncEnumerable( - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - await foreach (var dto in enumerable) - { - // - if (cancellationToken.IsCancellationRequested) + if (!conversationTitleResource.IsNullOrDefault()) { - yield break; + conversationTitle = conversationTitleResource.Resource; } - - // - await enricher.EnrichAsync( - source: dto, - destination: dto, - cancellationToken: cancellationToken - ); - yield return dto; } - } - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - public override async Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.FindOneAsync( - predicate: predicate, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Attach Extracted Items ... + var result = Mapper.Map(source, options => { // - await enricher.EnrichAsync( - source: result, - destination: result, - cancellationToken: cancellationToken - ); - } + options.Items[nameof(source.Owner)] = owner; + options.Items[nameof(source.ConversationTitle)] = conversationTitle; + options.Items[nameof(source.ConversationTitleResouce)] = conversationTitleResource; + }); // return result; } /// - /// find a collection of Dtos by proving a Conditional Expression ... + /// Enrich Specified Items ... /// - /// - /// - /// - /// + /// /// /// - public override async Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, + public virtual async Task> EnrichRange( + IEnumerable sources, CancellationToken cancellationToken = default ) { // - var result = await base.FindManyAsync( - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result, - destinations: result, - cancellationToken: cancellationToken - ); - } + var tasks = sources + .Select(x => Enrich(x, cancellationToken)); // + var result = await Task.WhenAll(tasks); return result; } /// - /// retrieve Dtos based on XQuery Pagination structure ... + /// Enrich Specified Items ... /// - /// - /// - /// - /// - /// + /// /// /// - public override async Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, + public virtual async Task> EnrichRange( + IEnumerable sources, CancellationToken cancellationToken = default ) { // - var result = await base.QueryAsync( - query: query, - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result.Items, - destinations: result.Items, - cancellationToken: cancellationToken - ); - } + var tasks = sources + .Select(x => Enrich(x, cancellationToken)); // + var result = await Task.WhenAll(tasks); return result; } #endregion - #endregion } } \ No newline at end of file diff --git a/Providers/Dtos/XAiProjectRepositoryService.cs b/Providers/Dtos/XAiProjectRepositoryService.cs index 95b3401..183c37c 100644 --- a/Providers/Dtos/XAiProjectRepositoryService.cs +++ b/Providers/Dtos/XAiProjectRepositoryService.cs @@ -1,30 +1,39 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore.Query; using xAiModels.Configurations; using xAiModels.Interfaces.Dtos; -using xAiModels.Interfaces.Enrichers; using xAiModels.Interfaces.Entities; using xAiModels.Models.Dtos; using xAiModels.Models.Entities; using xCommons.Extensions; using xDataService.Providers; +using xIdentityService.Interfaces; +using xIdentityService.Extensions; using xModels.Dtos; +using xAiModels.Interfaces; +using System.Linq; namespace xAiModels.Providers.Dtos { public class XAiProjectRepositoryService : XBaseRepositoryService, IXAiProjectRepositoryService { - private readonly IXAiProjectEnricher enricher; + private readonly IXIdentityProvider identityProvider; + private readonly IXAiMessageRepository messageRepository; + private readonly IXAiConversationRepository conversationRepository; + private readonly IXAiProjectTitleResourceProvider projectTitleResourceProvider; + private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; + private readonly IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider; public XAiProjectRepositoryService( - IXAiProjectEnricher enricher, - IXAiProjectRepository repository + IXAiProjectRepository repository, + IXIdentityProvider identityProvider, + IXAiMessageRepository messageRepository, + IXAiConversationRepository conversationRepository, + IXAiProjectTitleResourceProvider projectTitleResourceProvider, + IXAiConversationTitleResourceProvider conversationTitleResourceProvider, + IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider ) : base( repository, mapperProfiles: @@ -33,816 +42,281 @@ namespace xAiModels.Providers.Dtos ] ) { - this.enricher = enricher; + // + this.identityProvider = identityProvider; + this.messageRepository = messageRepository; + this.conversationRepository = conversationRepository; + this.projectTitleResourceProvider = projectTitleResourceProvider; + this.conversationTitleResourceProvider = conversationTitleResourceProvider; + this.projectDescriptionResourceProvider = projectDescriptionResourceProvider; } - // - #region Actions Base ... - // - #region Add ... + #region Enrichers ... /// - /// add a new Dto ... + /// Enrich Specified Item ... /// - /// - /// - /// - /// - public override async Task AddAsync( - XAiProjectDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await AddAsync( - item: item, - saveChanges: saveChanges, - fillConversations: false, - fillConversationMessages: false, - cancellationToken: cancellationToken - ); - } - - /// - /// add or update a Dto (add if not exists/update if exists) ... - /// - /// - /// - /// - /// - public override async Task AddOrUpdateAsync( - XAiProjectDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await AddOrUpdateAsync( - item: item, - saveChanges: saveChanges, - fillConversations: false, - fillConversationMessages: false, - cancellationToken: cancellationToken - ); - } - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - public override async Task UpdateAsync( - Guid id, - XAiProjectDto item, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await UpdateAsync( - id: id, - item: item, - saveChanges: saveChanges, - fillConversations: false, - fillConversationMessages: false, - cancellationToken: cancellationToken - ); - } - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - public override async Task RemoveAsync( - Guid id, - bool softDelete = false, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await RemoveAsync( - id: id, - softDelete: softDelete, - saveChanges: saveChanges, - fillConversations: false, - fillConversationMessages: false, - cancellationToken: cancellationToken - ); - } - - /// - /// remove an Dto ... - /// - /// - /// - /// - /// - /// - public override async Task RemoveAsync( - XAiProjectDto item, - bool softDelete = false, - bool saveChanges = true, - CancellationToken cancellationToken = default - ) - { - return await RemoveAsync( - item: item, - softDelete: softDelete, - saveChanges: saveChanges, - fillConversations: false, - fillConversationMessages: false, - cancellationToken: cancellationToken - ); - } - #endregion - - // - #region Retrieve ... - /// - /// retrieve an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - public override async Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await GetAsync( - id: id, - fillConversations: false, - includeBuilder: includeBuilder, - fillConversationMessages: false, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// retrieve all exists Dtos ... - /// - /// - /// - /// - /// - /// - public override async Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await GetAllAsync( - fillConversations: false, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - fillConversationMessages: false, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - public override IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return GetAllAsAsyncEnumerable( - fillConversations: false, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - fillConversationMessages: false, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - public override async Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await FindOneAsync( - predicate: predicate, - fillConversations: false, - includeBuilder: includeBuilder, - fillConversationMessages: false, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// find a collection of Dtos by proving a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - public override async Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await FindManyAsync( - predicate: predicate, - fillConversations: false, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - fillConversationMessages: false, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - - /// - /// retrieve Dtos based on XQuery Pagination structure ... - /// - /// - /// - /// - /// - /// - /// - /// - public override async Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - CancellationToken cancellationToken = default - ) - { - return await QueryAsync( - query: query, - predicate: predicate, - fillConversations: false, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - fillConversationMessages: false, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - } - #endregion - #endregion - - // - #region Actions ... - // - #region Add ... - /// - /// add a new Dto ... - /// - /// - /// + /// /// /// /// /// - public virtual async Task AddAsync( - XAiProjectDto item, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, + public virtual async Task Enrich( + XAiProject source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.AddAsync( - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken + // Mapping Default ... + var result = Mapper.Map(source); + result = await Enrich( + source: result, + fillConversations: fillConversations, + cancellationToken: cancellationToken, + fillConversationMessages: fillConversationMessages ); - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages - ); - } - // return result; } /// - /// add or update a Dto (add if not exists/update if exists) ... + /// Enrich Specified Item ... /// - /// - /// + /// /// /// /// /// - public virtual async Task AddOrUpdateAsync( - XAiProjectDto item, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, + public virtual async Task Enrich( + XAiProjectDto source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.AddAsync( - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Handle Owner ... + XPersonDto owner = null; + if (!source.OwnerId.IsNullOrEmpty()) { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages + // Try to Retrieve User Info ... + var device = identityProvider.GetDevice(); + var userInfo = await identityProvider.GetUserInfo( + device: device, + userSelectByParam: source.OwnerId + ); + owner = userInfo.ToXPersonDto(); + } + + // + // Handle Title ... + XResourceDto titleResource = null; + if (!source.Title.IsNullOrEmpty()) + { + // + titleResource = await projectTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.Id, + cancellationToken: cancellationToken ); } // - return result; - } - #endregion - - // - #region Update ... - /// - /// Update an Dto values ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task UpdateAsync( - Guid id, - XAiProjectDto item, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.UpdateAsync( - id: id, - item: item, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Handle Description ... + XResourceDto descriptionResource = null; + if (!source.Description.IsNullOrEmpty()) { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages + descriptionResource = await projectDescriptionResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.Id, + cancellationToken: cancellationToken ); } // - return result; - } - #endregion - - // - #region Remove ... - /// - /// remove an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task RemoveAsync( - Guid id, - bool softDelete = false, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.RemoveAsync( - id: id, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Handle Conversations ... + IEnumerable conversations = []; + if (fillConversations) { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, + // Reading Entities ... + var entitiies = await conversationRepository.FindManyAsync( + includeBuilder: null, + ignoreSoftDeleteds: true, cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages + predicate: x => x.ProjectId == source.Id, + orderBuilder: x => x.OrderBy(y => y.CreatedOn) ); - } - // - return result; - } - - /// - /// remove an Dto ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task RemoveAsync( - XAiProjectDto item, - bool softDelete = false, - bool saveChanges = true, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.RemoveAsync( - item: item, - softDelete: softDelete, - saveChanges: saveChanges, - cancellationToken: cancellationToken - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages - ); - } + // Converts to Dto Enumerable ... + conversations = entitiies + .MapConvert(); - // - return result; - } - #endregion - - // - #region Retrieve ... - /// - /// retrieve an Dto by it's Id ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task GetAsync( - Guid id, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.GetAsync( - id: id, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages - ); - } - - // - return result; - } - - /// - /// retrieve all exists Dtos ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task> GetAllAsync( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.GetAllAsync( - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result, - destinations: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages - ); - } - - // - return result; - } - - /// - /// retrieve all exists Dtos - /// as Async Enumerable ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async IAsyncEnumerable GetAllAsAsyncEnumerable( - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) - { - // - var enumerable = base.GetAllAsAsyncEnumerable( - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - await foreach (var dto in enumerable) - { - // - if (cancellationToken.IsCancellationRequested) + // Handle Conversation Enrichment ... + foreach (var conversation in conversations) { - yield break; + // + // Handle Owner ... + if (!conversation.OwnerId.IsNullOrEmpty()) + { + conversation.Owner = owner; + } + + // + // Handle Title Resource ... + if (!conversation.Title.IsNullOrEmpty()) + { + // + conversation.TitleResource = await conversationTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: conversation.Id, + cancellationToken: cancellationToken + ); + } + + // + // Handle Project Info ... + if (!conversation.ProjectId.IsDefaultGuid()) + { + conversation.ProjectTitle = source.Title; + conversation.ProjectTitleResource = titleResource; + conversation.ProjectDescription = source.Description; + conversation.ProjectDescriptionResource = descriptionResource; + } } // - await enricher.EnrichAsync( - source: dto, - destination: dto, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages - ); - yield return dto; + // Handle Fill Messages ... + if (fillConversationMessages) + { + // + foreach (var conversation in conversations) + { + // + IEnumerable messages = []; + + // + // Retrieve Message Entities ... + var messageEntities = await messageRepository.FindManyAsync( + includeBuilder: null, + ignoreSoftDeleteds: true, + cancellationToken: cancellationToken, + orderBuilder: x => x.OrderBy(y => y.CreatedOn), + predicate: x => x.ConversationId == conversation.Id + ); + if (messageEntities.HasChild()) + { + // + // Converts to Message ... + messages = messageEntities + .MapConvert(); + + // + // Ennrich Messages ... + foreach (var message in messages) + { + // + // Handle Owner ... + if (!message.OwnerId.IsNullOrEmpty()) + { + message.Owner = owner; + } + + // + // Handle Conversation ... + if (!message.ConversationId.IsDefaultGuid()) + { + message.ConversationTitle = conversation.Title; + message.ConversationTitleResouce = conversation.TitleResource; + } + } + } + + // + conversation.Messages = [.. messages]; + } + } } - } - - /// - /// find an Dto by providing a Conditional Expression ... - /// - /// - /// - /// - /// - /// - /// - /// - public virtual async Task FindOneAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - var result = await base.FindOneAsync( - predicate: predicate, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) + // Attach Extracted Items ... + var result = Mapper.Map(source, options => { // - await enricher.EnrichAsync( - source: result, - destination: result, - fillConversations: fillConversations, - cancellationToken: cancellationToken, - fillConversationMessages: fillConversationMessages - ); - } + options.Items[nameof(source.Owner)] = owner; + options.Items[nameof(source.Conversations)] = conversations; + options.Items[nameof(source.TitleResource)] = titleResource; + options.Items[nameof(source.DescriptionResource)] = descriptionResource; + }); // return result; } /// - /// find a collection of Dtos by proving a Conditional Expression ... + /// Enrich Specified Items ... /// - /// - /// - /// - /// + /// /// /// /// /// - public virtual async Task> FindManyAsync( - Expression> predicate, - bool ignoreSoftDeleteds = true, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.FindManyAsync( - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result, - destinations: result, - fillConversations: fillConversations, + var tasks = sources + .Select(x => Enrich( + source: x, cancellationToken: cancellationToken, + fillConversations: fillConversations, fillConversationMessages: fillConversationMessages - ); - } + )); // + var result = await Task.WhenAll(tasks); return result; } /// - /// retrieve Dtos based on XQuery Pagination structure ... + /// Enrich Specified Items ... /// - /// - /// - /// - /// - /// + /// /// /// /// /// - public virtual async Task> QueryAsync( - XQuery query, - bool ignoreSoftDeleteds = true, - Expression> predicate = null, - Func, IOrderedQueryable> orderBuilder = null, - Func, IIncludableQueryable> includeBuilder = null, - bool fillConversations = true, - bool fillConversationMessages = true, + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { // - var result = await base.QueryAsync( - query: query, - predicate: predicate, - orderBuilder: orderBuilder, - includeBuilder: includeBuilder, - cancellationToken: cancellationToken, - ignoreSoftDeleteds: ignoreSoftDeleteds - ); - - // - // Do Enrichment if result Exists ... - if (!result.IsNullOrDefault()) - { - // - await enricher.EnrichRangeAsync( - sources: result.Items, - destinations: result.Items, - fillConversations: fillConversations, + var tasks = sources + .Select(x => Enrich( + source: x, cancellationToken: cancellationToken, + fillConversations: fillConversations, fillConversationMessages: fillConversationMessages - ); - } + )); // + var result = await Task.WhenAll(tasks); return result; } - #endregion - #endregion + #endregion } } \ No newline at end of file diff --git a/Providers/Enrichers/XAiConversationEnricher.cs b/Providers/Enrichers/XAiConversationEnricher.cs index 8ae5bc5..d0441f7 100644 --- a/Providers/Enrichers/XAiConversationEnricher.cs +++ b/Providers/Enrichers/XAiConversationEnricher.cs @@ -1,215 +1,64 @@ -using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using xAiModels.Interfaces; -using xAiModels.Interfaces.Dtos; using xAiModels.Interfaces.Enrichers; +using xAiModels.Interfaces.Entities; using xAiModels.Models.Dtos; +using xAiModels.Models.Entities; using xCommons.Extensions; using xIdentityService.Interfaces; using xIdentityService.Extensions; using xModels.Dtos; -using System.Linq; namespace xAiModels.Providers.Enrichers { public class XAiConversationEnricher : IXAiConversationEnricher { private readonly IXIdentityProvider identityProvider; - private readonly IXAiProjectRepositoryService projectRepositoryService; + private readonly IXAiConversationRepository repository; + private readonly IXAiProjectTitleResourceProvider projectTitleResourceProvider; private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; + private readonly IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider; public XAiConversationEnricher( IXIdentityProvider identityProvider, - IXAiProjectRepositoryService projectRepositoryService, - IXAiConversationTitleResourceProvider conversationTitleResourceProvider + IXAiConversationRepository repository, + IXAiProjectTitleResourceProvider projectTitleResourceProvider, + IXAiConversationTitleResourceProvider conversationTitleResourceProvider, + IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider ) { // + this.repository = repository; this.identityProvider = identityProvider; - this.projectRepositoryService = projectRepositoryService; + this.projectTitleResourceProvider = projectTitleResourceProvider; this.conversationTitleResourceProvider = conversationTitleResourceProvider; - } - - /// - /// Converts a Signle Entity to Dto ... - /// - /// - /// - /// - /// - public async Task EnrichAsync( - XAiConversationDto source, - XAiConversationDto destination, - CancellationToken cancellationToken = default - ) - { - await EnrichAsync( - source: source, - fillMessages: false, - destination: destination, - cancellationToken: cancellationToken - ); - } - - /// - /// Converts a Collection of Entities to Dtos ... - /// - /// - /// - /// - /// - public async Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, - CancellationToken cancellationToken = default - ) - { - await EnrichRangeAsync( - sources: sources, - fillMessages: false, - destinations: destinations, - cancellationToken: cancellationToken - ); - } - - /// - /// Converts a Signle Entity to Dto ... - /// - /// - /// - /// - /// - /// - public async Task EnrichAsync( - XAiConversationDto source, - XAiConversationDto destination, - bool fillMessages = false, - CancellationToken cancellationToken = default - ) - { - // - // Run independent async operations concurrently - var ownerTask = ResolveOwnerAsync(source.OwnerId, cancellationToken); - var projectTask = ResolveProjectAsync(source.ProjectId, cancellationToken); - var titleLocalesTask = ResolveTitleLocalesAsync(source.Title, cancellationToken); - var messagesTask = ResolveMessagesAsync(source.Id, cancellationToken); - - // - // wait until All Tasks Resolved ... - Task[] tasks = [ - ownerTask, - projectTask, - titleLocalesTask - ]; - if (fillMessages) - { - tasks = [.. tasks, messagesTask]; - } - await Task.WhenAll(tasks); - - // - // Attached Resolved Info to Destination ... - destination.Owner = ownerTask.Result; - destination.TitleResource = titleLocalesTask.Result; - var project = projectTask.Result; - if (!project.IsNullOrDefault()) - { - destination.ProjectTitle = project.Title; - destination.ProjectDescription = project.Description; - destination.ProjectTitleResource = project.TitleResource; - destination.ProjectDescriptionResource = project.DescriptionResource; - } - if (!messagesTask.Result.IsNull()) - { - destination.Messages = [.. messagesTask.Result]; - } - } - - /// - /// Converts a Collection of Entities to Dtos ... - /// - /// - /// - /// - /// - /// - public async Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, - bool fillMessages = false, - CancellationToken cancellationToken = default - ) - { - // - // Make Tasks Ready ... - var tasks = sources.Zip(destinations, (src, dst) => - EnrichAsync(src, dst, cancellationToken) - ); - - // - await Task.WhenAll(tasks); + this.projectDescriptionResourceProvider = projectDescriptionResourceProvider; } // - #region Private ... + #region Enrichers ... /// - /// Reading Owner User Info ... + /// Enrich Specified Item ... /// - /// + /// + /// /// /// - private async Task ResolveOwnerAsync( - string ownerId, + public virtual async Task Enrich( + XAiConversation source, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - XPersonDto result = null; - - // - // Validate ... - if (ownerId.IsNullOrEmpty()) - { - return result; - } - - // - // Try to Retrieve User Info ... - var device = identityProvider.GetDevice(); - var userInfo = await identityProvider.GetUserInfo( - device: device, - userSelectByParam: ownerId - ); - result = userInfo.ToXPersonDto(); - - // - return result; - } - - /// - /// Reading Title Locales ... - /// - /// - /// - /// - private async Task ResolveTitleLocalesAsync( - string title, - CancellationToken cancellationToken = default - ) - { - // - XResourceDto result = null; - if (title.IsNullOrEmpty()) - { - return result; - } - - // - result = await conversationTitleResourceProvider.GetResource( - owner: null, - identifier: title, + // Mapping Default ... + var result = source.MapConvert(); + result = await Enrich( + source: result, + fillMessages: fillMessages, cancellationToken: cancellationToken ); @@ -218,58 +67,130 @@ namespace xAiModels.Providers.Enrichers } /// - /// Retrieve Project ... + /// Enrich Specified Item ... /// - /// + /// + /// /// /// - private async Task ResolveProjectAsync( - Guid projectId, + public virtual async Task Enrich( + XAiConversationDto source, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - XAiProjectDto result = null; - if (projectId.IsNull() || projectId.IsDefaultGuid()) + // Handdle Owner ... + XPersonDto owner = null; + if (!source.OwnerId.IsNullOrEmpty()) { - return result; + // + // Try to Retrieve User Info ... + var device = identityProvider.GetDevice(); + var userInfo = await identityProvider.GetUserInfo( + device: device, + userSelectByParam: source.OwnerId + ); + owner = userInfo.ToXPersonDto(); } // - result = await projectRepositoryService.GetAsync( - id: projectId, - includeBuilder: null, - ignoreSoftDeleteds: true, - cancellationToken: cancellationToken - ); + // Handle Title Resource ... + XResourceDto titleResource = null; + if (!source.Title.IsNullOrEmpty()) + { + // + titleResource = await conversationTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.Id, + cancellationToken: cancellationToken + ); + } + + // + // Handle Project Info ... + XResourceDto projectTitleResource = null; + XResourceDto projectDescriptionResource = null; + if (!source.ProjectId.IsDefaultGuid()) + { + // + projectTitleResource = await projectTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.ProjectId, + cancellationToken: cancellationToken + ); + + // + projectDescriptionResource = await projectDescriptionResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.ProjectId, + cancellationToken: cancellationToken + ); + } + + // + // Attach Extracted Items ... + var result = source.MapConvert(); + result.Owner = owner; + result.TitleResource = titleResource; + result.ProjectTitleResource = projectTitleResource; + result.ProjectDescriptionResource = projectDescriptionResource; // return result; } /// - /// Retrieve Specified Conversation Messages ... + /// Enrich Specified Items ... /// - /// + /// + /// /// /// - private async Task> ResolveMessagesAsync( - Guid conversationId, + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, CancellationToken cancellationToken = default ) { // - var result = new List(); - - // - if (conversationId.IsDefaultGuid()) - { - return result; - } + var tasks = sources + .Select(x => Enrich( + source: x, + fillMessages: fillMessages, + cancellationToken: cancellationToken + )); // + var result = await Task.WhenAll(tasks); return result; } - #endregion + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + /// + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillMessages = false, + CancellationToken cancellationToken = default + ) + { + // + var tasks = sources + .Select(x => Enrich( + source: x, + fillMessages: fillMessages, + cancellationToken: cancellationToken + )); + + // + var result = await Task.WhenAll(tasks); + return result; + } + #endregion } } \ No newline at end of file diff --git a/Providers/Enrichers/XAiMessageEnricher.cs b/Providers/Enrichers/XAiMessageEnricher.cs index 3c03cad..4bec432 100644 --- a/Providers/Enrichers/XAiMessageEnricher.cs +++ b/Providers/Enrichers/XAiMessageEnricher.cs @@ -10,135 +10,144 @@ using xIdentityService.Extensions; using xModels.Dtos; using System.Linq; using xAiModels.Interfaces.Dtos; +using xAiModels.Models.Entities; +using xAiModels.Interfaces; namespace xAiModels.Providers.Enrichers { public class XAiMessageEnricher : IXAiMessageEnricher { private readonly IXIdentityProvider identityProvider; - private readonly IXAiConversationRepositoryService conversationRepositoryService; + private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; public XAiMessageEnricher( IXIdentityProvider identityProvider, - IXAiConversationRepositoryService conversationRepositoryService + IXAiConversationTitleResourceProvider conversationTitleResourceProvider ) { this.identityProvider = identityProvider; - this.conversationRepositoryService = conversationRepositoryService; - } - - public async Task EnrichAsync( - XAiMessageDto source, - XAiMessageDto destination, - CancellationToken cancellationToken = default - ) - { - // - // Run independent async operations concurrently - var ownerTask = ResolveOwnerAsync(source.OwnerId, cancellationToken); - var conversationTask = ResolveConversationAsync(source.ConversationId, cancellationToken); - - // - // wait until All Tasks Resolved ... - await Task.WhenAll(ownerTask, conversationTask); - - // - // Attached Resolved Info to Destination ... - destination.Owner = ownerTask.Result; - if (!conversationTask.Result.IsNullOrDefault()) - { - // - destination.ConversationTitle = conversationTask.Result.Title; - destination.ConversationTitleResouce = conversationTask.Result.TitleResource; - } - } - - public async Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, - CancellationToken cancellationToken = default - ) - { - // - // Make Tasks Ready ... - var tasks = sources.Zip(destinations, (src, dst) => - EnrichAsync(src, dst, cancellationToken) - ); - - // - await Task.WhenAll(tasks); + this.conversationTitleResourceProvider = conversationTitleResourceProvider; } // - #region Private ... + #region Enrichers ... /// - /// Reading Owner User Info ... + /// Enrich Specified Item ... /// - /// + /// /// /// - private async Task ResolveOwnerAsync( - string ownerId, + public virtual async Task Enrich( + XAiMessage source, CancellationToken cancellationToken = default ) { // - XPersonDto result = null; - - // - // Validate ... - if (ownerId.IsNullOrEmpty()) - { - return result; - } - - // - // Try to Retrieve User Info ... - var device = identityProvider.GetDevice(); - var userInfo = await identityProvider.GetUserInfo( - device: device, - userSelectByParam: ownerId - ); - result = userInfo.ToXPersonDto(); - - // - return result; - } - - /// - /// Reading Conversation ... - /// - /// - /// - /// - private async Task ResolveConversationAsync( - Guid conversationId, - CancellationToken cancellationToken = default - ) - { - // - XAiConversationDto result = null; - - // - // Validate ... - if (conversationId.IsNull() || - conversationId.IsDefaultGuid() - ) - { - return result; - } - - // - result = await conversationRepositoryService.GetAsync( - id: conversationId, - includeBuilder: null, - ignoreSoftDeleteds: true, + // Mapping Default ... + var result = source.MapConvert(); + result = await Enrich( + source: result, cancellationToken: cancellationToken ); // return result; } - #endregion + + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + public virtual async Task Enrich( + XAiMessageDto source, + CancellationToken cancellationToken = default + ) + { + // + // Handdle Owner ... + XPersonDto owner = null; + if (!source.OwnerId.IsNullOrEmpty()) + { + // + // Try to Retrieve User Info ... + var device = identityProvider.GetDevice(); + var userInfo = await identityProvider.GetUserInfo( + device: device, + userSelectByParam: source.OwnerId + ); + owner = userInfo.ToXPersonDto(); + } + + // + // Hanlde Conversation Title ... + string conversationTitle = string.Empty; + XResourceDto conversationTitleResource = null; + if (!source.ConversationId.IsDefaultGuid()) + { + // + conversationTitleResource = await conversationTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.ConversationId, + cancellationToken: cancellationToken + ); + if (!conversationTitleResource.IsNullOrDefault()) + { + conversationTitle = conversationTitleResource.Resource; + } + } + + // + // Attach Extracted Items ... + var result = source.MapConvert(); + result.Owner = owner; + result.ConversationTitle = conversationTitle; + result.ConversationTitleResouce = conversationTitleResource; + + // + return result; + } + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + public virtual async Task> EnrichRange( + IEnumerable sources, + CancellationToken cancellationToken = default + ) + { + // + var tasks = sources + .Select(x => Enrich(x, cancellationToken)); + + // + var result = await Task.WhenAll(tasks); + return result; + } + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + public virtual async Task> EnrichRange( + IEnumerable sources, + CancellationToken cancellationToken = default + ) + { + // + var tasks = sources + .Select(x => Enrich(x, cancellationToken)); + + // + var result = await Task.WhenAll(tasks); + return result; + } + #endregion } } \ No newline at end of file diff --git a/Providers/Enrichers/XAiProjectEnricher.cs b/Providers/Enrichers/XAiProjectEnricher.cs index 0c1f33e..6c30b5e 100644 --- a/Providers/Enrichers/XAiProjectEnricher.cs +++ b/Providers/Enrichers/XAiProjectEnricher.cs @@ -1,276 +1,309 @@ -using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using xAiModels.Interfaces.Enrichers; +using xAiModels.Interfaces.Entities; using xAiModels.Models.Dtos; +using xAiModels.Models.Entities; using xCommons.Extensions; using xIdentityService.Interfaces; using xIdentityService.Extensions; using xModels.Dtos; using xAiModels.Interfaces; -using xAiModels.Interfaces.Dtos; namespace xAiModels.Providers.Enrichers { public class XAiProjectEnricher : IXAiProjectEnricher { private readonly IXIdentityProvider identityProvider; + private readonly IXAiMessageRepository messageRepository; + private readonly IXAiConversationRepository conversationRepository; private readonly IXAiProjectTitleResourceProvider projectTitleResourceProvider; - // private readonly IXAiConversationRepositoryService conversationRepositoryService; + private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; private readonly IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider; public XAiProjectEnricher( IXIdentityProvider identityProvider, + IXAiMessageRepository messageRepository, + IXAiConversationRepository conversationRepository, IXAiProjectTitleResourceProvider projectTitleResourceProvider, - // IXAiConversationRepositoryService conversationRepositoryService, + IXAiConversationTitleResourceProvider conversationTitleResourceProvider, IXAiProjectDescriptionResourceProvider projectDescriptionResourceProvider ) { + // this.identityProvider = identityProvider; + this.messageRepository = messageRepository; + this.conversationRepository = conversationRepository; this.projectTitleResourceProvider = projectTitleResourceProvider; - // this.conversationRepositoryService = conversationRepositoryService; + this.conversationTitleResourceProvider = conversationTitleResourceProvider; this.projectDescriptionResourceProvider = projectDescriptionResourceProvider; } - public async Task EnrichAsync( - XAiProjectDto source, - XAiProjectDto destination, + // + #region Enrichers ... + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + /// + /// + public virtual async Task Enrich( + XAiProject source, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { - await EnrichAsync( - source: source, - destination: destination, - fillConversations: false, - cancellationToken: cancellationToken + // + // Mapping Default ... + var result = source.MapConvert(); + result = await Enrich( + source: result, + fillConversations: fillConversations, + cancellationToken: cancellationToken, + fillConversationMessages: fillConversationMessages ); + + // + return result; } - public async Task EnrichAsync( + /// + /// Enrich Specified Item ... + /// + /// + /// + /// + /// + /// + public virtual async Task Enrich( XAiProjectDto source, - XAiProjectDto destination, - bool fillConversations = true, - bool fillConversationMessages = true, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { // - // Run independent async operations concurrently - var conversationsTask = ResolveConversationsAsync( - source.Id, - fillConversationMessages, - cancellationToken - ); - var titleTask = ResolveTitleAsync(source.Title, cancellationToken); - var ownerTask = ResolveOwnerAsync(source.OwnerId, cancellationToken); - var descriptionTask = ResolveDescriptionAsync(source.Description, cancellationToken); + // Handle Owner ... + XPersonDto owner = null; + if (!source.OwnerId.IsNullOrEmpty()) + { + // + // Try to Retrieve User Info ... + var device = identityProvider.GetDevice(); + var userInfo = await identityProvider.GetUserInfo( + device: device, + userSelectByParam: source.OwnerId + ); + owner = userInfo.ToXPersonDto(); + } // - // wait until All Tasks Resolved ... - Task[] tasks = + // Handle Title ... + XResourceDto titleResource = null; + if (!source.Title.IsNullOrEmpty()) { - titleTask, - ownerTask, - descriptionTask - }; + // + titleResource = await projectTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.Id, + cancellationToken: cancellationToken + ); + } + + // + // Handle Description ... + XResourceDto descriptionResource = null; + if (!source.Description.IsNullOrEmpty()) + { + // + descriptionResource = await projectDescriptionResourceProvider.GetResource( + owner: source.OwnerId, + identifier: source.Id, + cancellationToken: cancellationToken + ); + } + + // + // Handle Conversations ... + IEnumerable conversations = []; if (fillConversations) { - tasks = [.. tasks, conversationsTask]; - } - await Task.WhenAll(tasks); - - // - // Attached Resolved Info to Destination ... - destination.Owner = ownerTask.Result; - destination.TitleResource = titleTask.Result; - destination.DescriptionResource = descriptionTask.Result; - if (!conversationsTask.Result.IsNull()) - { - destination.Conversations = [.. conversationsTask.Result]; - } - } - - public async Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, - CancellationToken cancellationToken = default - ) - { - // - // Make Tasks Ready ... - var tasks = sources.Zip(destinations, (src, dst) => - EnrichAsync(src, dst, cancellationToken) - ); - - // - await Task.WhenAll(tasks); - } - - public async Task EnrichRangeAsync( - IEnumerable sources, - IEnumerable destinations, - bool fillConversations = true, - bool fillConversationMessages = true, - CancellationToken cancellationToken = default - ) - { - // - // Make Tasks Ready ... - var tasks = sources.Zip(destinations, (src, dst) => - EnrichAsync( - source: src, - destination: dst, - fillConversations: fillConversations, + // + // Reading Entities ... + var entitiies = await conversationRepository.FindManyAsync( + includeBuilder: null, + ignoreSoftDeleteds: true, cancellationToken: cancellationToken, + predicate: x => x.ProjectId == source.Id, + orderBuilder: x => x.OrderBy(y => y.CreatedOn) + ); + + // + // Converts to Dto Enumerable ... + conversations = entitiies + .MapConvert(); + + // + // Handle Conversation Enrichment ... + foreach (var conversation in conversations) + { + // + // Handle Owner ... + if (!conversation.OwnerId.IsNullOrEmpty()) + { + conversation.Owner = owner; + } + + // + // Handle Title Resource ... + if (!conversation.Title.IsNullOrEmpty()) + { + // + conversation.TitleResource = await conversationTitleResourceProvider.GetResource( + owner: source.OwnerId, + identifier: conversation.Id, + cancellationToken: cancellationToken + ); + } + + // + // Handle Project Info ... + if (!conversation.ProjectId.IsDefaultGuid()) + { + conversation.ProjectTitle = source.Title; + conversation.ProjectTitleResource = titleResource; + conversation.ProjectDescription = source.Description; + conversation.ProjectDescriptionResource = descriptionResource; + } + } + + // + // Handle Fill Messages ... + if (fillConversationMessages) + { + // + foreach (var conversation in conversations) + { + // + IEnumerable messages = []; + + // + // Retrieve Message Entities ... + var messageEntities = await messageRepository.FindManyAsync( + includeBuilder: null, + ignoreSoftDeleteds: true, + cancellationToken: cancellationToken, + orderBuilder: x => x.OrderBy(y => y.CreatedOn), + predicate: x => x.ConversationId == conversation.Id + ); + if (messageEntities.HasChild()) + { + // + // Converts to Message ... + messages = messageEntities + .MapConvert(); + + // + // Ennrich Messages ... + foreach (var message in messages) + { + // + // Handle Owner ... + if (!message.OwnerId.IsNullOrEmpty()) + { + message.Owner = owner; + } + + // + // Handle Conversation ... + if (!message.ConversationId.IsDefaultGuid()) + { + message.ConversationTitle = conversation.Title; + message.ConversationTitleResouce = conversation.TitleResource; + } + } + } + + // + conversation.Messages = [.. messages]; + } + } + } + + // + // Attach Extracted Items ... + var result = source.MapConvert(); + result.Owner = owner; + result.TitleResource = titleResource; + result.Conversations = [.. conversations]; + result.DescriptionResource = descriptionResource; + + // + return result; + } + + /// + /// Enrich Specified Items ... + /// + /// + /// + /// + /// + /// + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, + CancellationToken cancellationToken = default + ) + { + // + var tasks = sources + .Select(x => Enrich( + source: x, + cancellationToken: cancellationToken, + fillConversations: fillConversations, fillConversationMessages: fillConversationMessages - ) - ); - - // - await Task.WhenAll(tasks); - } - - // - #region Private ... - /// - /// Reading Owner User Info ... - /// - /// - /// - /// - private async Task ResolveOwnerAsync( - string ownerId, - CancellationToken cancellationToken = default - ) - { - // - XPersonDto result = null; - - // - // Validate ... - if (ownerId.IsNullOrEmpty()) - { - return result; - } - - // - // Try to Retrieve User Info ... - var device = identityProvider.GetDevice(); - var userInfo = await identityProvider.GetUserInfo( - device: device, - userSelectByParam: ownerId - ); - result = userInfo.ToXPersonDto(); + )); // + var result = await Task.WhenAll(tasks); return result; } /// - /// Retrieve Title Resource ... + /// Enrich Specified Items ... /// - /// + /// + /// + /// /// /// - private async Task ResolveTitleAsync( - string identifier, + public virtual async Task> EnrichRange( + IEnumerable sources, + bool fillConversations = false, + bool fillConversationMessages = false, CancellationToken cancellationToken = default ) { // - XResourceDto result = null; - - // - // Validate ... - if (identifier.IsNullOrEmpty()) - { - return result; - } - - // - result = await projectTitleResourceProvider.GetResource( - owner: null, - identifier: identifier, - cancellationToken: cancellationToken - ); + var tasks = sources + .Select(x => Enrich( + source: x, + cancellationToken: cancellationToken, + fillConversations: fillConversations, + fillConversationMessages: fillConversationMessages + )); // + var result = await Task.WhenAll(tasks); return result; } - - /// - /// Retrieve Description Resource ... - /// - /// - /// - /// - private async Task ResolveDescriptionAsync( - string identifier, - CancellationToken cancellationToken = default - ) - { - // - XResourceDto result = null; - - // - // Validate ... - if (identifier.IsNullOrEmpty()) - { - return result; - } - - // - result = await projectDescriptionResourceProvider.GetResource( - owner: null, - identifier: identifier, - cancellationToken: cancellationToken - ); - - // - return result; - } - - /// - /// Retrieve Project Conversations ... - /// - /// - /// - /// - /// - private async Task> ResolveConversationsAsync( - Guid projectId, - bool fillMessages = false, - CancellationToken cancellationToken = default - ) - { - // - List result = []; - - // - // Validate ... - if (projectId.IsNull() || - projectId.IsDefaultGuid() - ) - { - return result; - } - - // - // var items = await conversationRepositoryService.FindManyAsync( - // orderBuilder: null, - // includeBuilder: null, - // ignoreSoftDeleteds: true, - // fillMessages: fillMessages, - // predicate: x => x.Id == projectId, - // cancellationToken: cancellationToken - // ); - // result = [.. items]; - - // - return result; - } - #endregion + #endregion } } \ No newline at end of file diff --git a/Providers/XAiDataProvider.cs b/Providers/XAiDataProvider.cs index 49cf690..edd742f 100644 --- a/Providers/XAiDataProvider.cs +++ b/Providers/XAiDataProvider.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; -using MongoDB.Driver.Core.Connections; using xAiModels.Constants; using xAiModels.Extensions; using xAiModels.Interfaces; @@ -105,11 +104,11 @@ namespace xAiModels.Providers var result = await projectRepositoryService.FindManyAsync( includeBuilder: null, ignoreSoftDeleteds: true, - fillConversations: fillConversations, + // fillConversations: fillConversations, predicate: x => x.OwnerId == ownerId, cancellationToken: cancellationToken, - orderBuilder: x => x.OrderBy(y => y.CreatedOn), - fillConversationMessages: fillConversationMessages + orderBuilder: x => x.OrderBy(y => y.CreatedOn) + // fillConversationMessages: fillConversationMessages ); // @@ -143,7 +142,7 @@ namespace xAiModels.Providers var result = await conversationRepositoryService.FindManyAsync( includeBuilder: null, ignoreSoftDeleteds: false, - fillMessages: fillMessages, + // fillMessages: fillMessages, cancellationToken: cancellationToken, predicate: x => x.ProjectId == projectId, orderBuilder: x => x.OrderBy(y => y.CreatedOn) @@ -234,8 +233,8 @@ namespace xAiModels.Providers result = await projectRepositoryService.AddAsync( item: item, saveChanges: true, - fillConversations: false, - fillConversationMessages: false, + // fillConversations: false, + // fillConversationMessages: false, cancellationToken: cancellationToken ); @@ -313,8 +312,8 @@ namespace xAiModels.Providers id: projectId, includeBuilder: null, ignoreSoftDeleteds: true, - fillConversations: false, - fillConversationMessages: false, + // fillConversations: false, + // fillConversationMessages: false, cancellationToken: cancellationToken ); if (project.IsNullOrDefault()) @@ -353,7 +352,7 @@ namespace xAiModels.Providers result = await conversationRepositoryService.AddAsync( item: item, saveChanges: true, - fillMessages: false, + // fillMessages: false, cancellationToken: cancellationToken ); @@ -730,8 +729,8 @@ namespace xAiModels.Providers id: project.Id, includeBuilder: null, ignoreSoftDeleteds: true, - fillConversations: false, - fillConversationMessages: false, + // fillConversations: false, + // fillConversationMessages: false, cancellationToken: cancellationToken ); } @@ -822,8 +821,8 @@ namespace xAiModels.Providers id: project.Id, includeBuilder: null, ignoreSoftDeleteds: true, - fillConversations: false, - fillConversationMessages: false, + // fillConversations: false, + // fillConversationMessages: false, cancellationToken: cancellationToken ); } @@ -944,8 +943,8 @@ namespace xAiModels.Providers id: project.Id, includeBuilder: null, ignoreSoftDeleteds: true, - fillConversations: false, - fillConversationMessages: false, + // fillConversations: false, + // fillConversationMessages: false, cancellationToken: cancellationToken ); }