diff --git a/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs b/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs index 9ba98c5d7..b94876c3e 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs @@ -10,6 +10,7 @@ public class ConversationFilter public string? Title { get; set; } public string? TitleAlias { get; set; } public string? AgentId { get; set; } + public List? AgentIds { get; set; } public string? Status { get; set; } public string? Channel { get; set; } public string? ChannelId { get; set; } diff --git a/src/Infrastructure/BotSharp.Abstraction/SideCar/Models/SideCarOptions.cs b/src/Infrastructure/BotSharp.Abstraction/SideCar/Models/SideCarOptions.cs index a4858c5c1..f221cab20 100644 --- a/src/Infrastructure/BotSharp.Abstraction/SideCar/Models/SideCarOptions.cs +++ b/src/Infrastructure/BotSharp.Abstraction/SideCar/Models/SideCarOptions.cs @@ -7,6 +7,15 @@ public class SideCarOptions public static SideCarOptions Empty() { - return new SideCarOptions(); + return new(); + } + + public static SideCarOptions InheritStates(IEnumerable? targetStates = null) + { + return new() + { + IsInheritStates = true, + InheritStateKeys = targetStates + }; } } diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs index 3d03e816a..f772acb21 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs @@ -396,6 +396,12 @@ public PagedItems GetConversations(ConversationFilter filter) Directory.CreateDirectory(dir); } + if (filter?.AgentId != null) + { + filter.AgentIds ??= []; + filter.AgentIds.Add(filter.AgentId); + } + var totalDirs = Directory.GetDirectories(dir); foreach (var d in totalDirs) { @@ -419,9 +425,9 @@ public PagedItems GetConversations(ConversationFilter filter) { matched = matched && record.TitleAlias.Contains(filter.TitleAlias); } - if (filter?.AgentId != null) + if (filter?.AgentIds != null && filter.AgentIds.Any()) { - matched = matched && record.AgentId == filter.AgentId; + matched = matched && filter.AgentIds.Contains(record.AgentId); } if (filter?.Status != null) { diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs index edcf3a5f2..d0da6fbf9 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs @@ -346,6 +346,12 @@ public PagedItems GetConversations(ConversationFilter filter) var convBuilder = Builders.Filter; var convFilters = new List>() { convBuilder.Empty }; + if (filter?.AgentId != null) + { + filter.AgentIds ??= []; + filter.AgentIds.Add(filter.AgentId); + } + // Filter conversations if (!string.IsNullOrEmpty(filter?.Id)) { @@ -359,9 +365,9 @@ public PagedItems GetConversations(ConversationFilter filter) { convFilters.Add(convBuilder.Regex(x => x.Title, new BsonRegularExpression(filter.TitleAlias, "i"))); } - if (!string.IsNullOrEmpty(filter?.AgentId)) + if (filter?.AgentIds != null && filter.AgentIds.Any()) { - convFilters.Add(convBuilder.Eq(x => x.AgentId, filter.AgentId)); + convFilters.Add(convBuilder.In(x => x.AgentId, filter.AgentIds)); } if (!string.IsNullOrEmpty(filter?.Status)) {