using System.Linq; using xModels.Dtos; using System.Threading; using xCommons.Extensions; using xAiModels.Interfaces; using xAiModels.Models.Dtos; using System.Threading.Tasks; using xAiModels.Models.Entities; using System.Collections.Generic; using xIdentityService.Interfaces; using xIdentityService.Extensions; using xAiModels.Interfaces.Enrichers; namespace xAiModels.Providers.Enrichers { public class XAiMessageEnricher : IXAiMessageEnricher { private readonly IXIdentityProvider identityProvider; private readonly IXAiConversationTitleResourceProvider conversationTitleResourceProvider; public XAiMessageEnricher( IXIdentityProvider identityProvider, IXAiConversationTitleResourceProvider conversationTitleResourceProvider ) { this.identityProvider = identityProvider; this.conversationTitleResourceProvider = conversationTitleResourceProvider; } // #region Enrichers ... /// /// Enrich Specified Item ... /// /// /// /// public virtual async Task Enrich( XAiMessage source, CancellationToken cancellationToken = default ) { // // Mapping Default ... var result = source.MapConvert(); result = await Enrich( source: result, cancellationToken: cancellationToken ); // return result; } /// /// 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 } }