From 9a8f559785bb94b50cd3d1efbd3abef59432f09a Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Thu, 13 Mar 2025 13:06:00 -0500 Subject: [PATCH] temp save --- .../Conversations/IConversationService.cs | 2 +- .../Repositories/IBotSharpRepository.cs | 2 +- .../Conversations/Services/ConversationService.cs | 4 ++-- .../FileRepository/FileRepository.Conversation.cs | 7 +++++-- .../BotSharp.OpenAPI/Controllers/ConversationController.cs | 2 +- .../Conversations/Request/UpdateConversationRequest.cs | 3 ++- .../Repository/MongoRepository.Conversation.cs | 7 ++++++- 7 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs index 44ceebf1..15f7e89e 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs @@ -13,7 +13,7 @@ public interface IConversationService Task> GetConversations(ConversationFilter filter); Task UpdateConversationTitle(string id, string title); Task UpdateConversationTitleAlias(string id, string titleAlias); - Task UpdateConversationTags(string conversationId, List tags); + Task UpdateConversationTags(string conversationId, List toAddTags, List toDeleteTags); Task UpdateConversationMessage(string conversationId, UpdateMessageRequest request); Task> GetLastConversations(); Task> GetIdleConversations(int batchSize, int messageLimit, int bufferHours, IEnumerable excludeAgentIds); diff --git a/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs b/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs index 9bccb82e..332ca340 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs @@ -132,7 +132,7 @@ public interface IBotSharpRepository : IHaveServiceProvider => throw new NotImplementedException(); void UpdateConversationTitleAlias(string conversationId, string titleAlias) => throw new NotImplementedException(); - bool UpdateConversationTags(string conversationId, List tags) + bool UpdateConversationTags(string conversationId, List toAddTags, List toDeleteTags) => throw new NotImplementedException(); bool AppendConversationTags(string conversationId, List tags) => throw new NotImplementedException(); diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs index a1a0868a..9fc97a72 100644 --- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs +++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs @@ -59,10 +59,10 @@ public partial class ConversationService : IConversationService return conversation; } - public async Task UpdateConversationTags(string conversationId, List tags) + public async Task UpdateConversationTags(string conversationId, List toAddTags, List toDeleteTags) { var db = _services.GetRequiredService(); - return db.UpdateConversationTags(conversationId, tags); + return db.UpdateConversationTags(conversationId, toAddTags, toDeleteTags); } public async Task UpdateConversationMessage(string conversationId, UpdateMessageRequest request) diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs index 3d70264c..4e5998fb 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs @@ -158,7 +158,7 @@ public partial class FileRepository } } - public bool UpdateConversationTags(string conversationId, List tags) + public bool UpdateConversationTags(string conversationId, List toAddTags, List toDeleteTags) { if (string.IsNullOrEmpty(conversationId)) return false; @@ -170,7 +170,10 @@ public partial class FileRepository var json = File.ReadAllText(convFile); var conv = JsonSerializer.Deserialize(json, _options); - conv.Tags = tags ?? new(); + + var tags = conv.Tags.Concat(toAddTags).ToList(); + conv.Tags = tags.Where(x => !toDeleteTags.Contains(x, StringComparer.OrdinalIgnoreCase)).ToList(); + conv.UpdatedTime = DateTime.UtcNow; File.WriteAllText(convFile, JsonSerializer.Serialize(conv, _options)); return true; diff --git a/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs b/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs index 6cb42ac6..f032f504 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs @@ -255,7 +255,7 @@ public class ConversationController : ControllerBase public async Task UpdateConversationTags([FromRoute] string conversationId, [FromBody] UpdateConversationRequest request) { var conv = _services.GetRequiredService(); - return await conv.UpdateConversationTags(conversationId, request.Tags); + return await conv.UpdateConversationTags(conversationId, request.ToAddTags, request.ToDeleteTags); } [HttpPut("/conversation/{conversationId}/update-message")] diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/Request/UpdateConversationRequest.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/Request/UpdateConversationRequest.cs index c9b89747..c177221c 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/Request/UpdateConversationRequest.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/Request/UpdateConversationRequest.cs @@ -2,5 +2,6 @@ namespace BotSharp.OpenAPI.ViewModels.Conversations; public class UpdateConversationRequest { - public List Tags { get; set; } = []; + public List ToAddTags { get; set; } = []; + public List ToDeleteTags { get; set; } = []; } diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs index 908e66b5..393846bf 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs @@ -134,11 +134,16 @@ public partial class MongoRepository _dc.Conversations.UpdateOne(filterConv, updateConv); } - public bool UpdateConversationTags(string conversationId, List tags) + public bool UpdateConversationTags(string conversationId, List toAddTags, List toDeleteTags) { if (string.IsNullOrEmpty(conversationId)) return false; var filter = Builders.Filter.Eq(x => x.Id, conversationId); + var conv = _dc.Conversations.Find(filter).FirstOrDefault(); + if (conv == null) return false; + + + var update = Builders.Update .Set(x => x.Tags, tags ?? new()) .Set(x => x.UpdatedTime, DateTime.UtcNow);