From 99818b146587a0345d4f328c9143de629b179ca1 Mon Sep 17 00:00:00 2001 From: "nick.yi" Date: Wed, 24 Dec 2025 22:28:21 +0800 Subject: [PATCH] optimize CreateNewConversation use async method --- .../Repositories/IBotSharpRepository.cs | 2 +- .../Services/ConversationService.cs | 2 +- .../FileRepository.Conversation.cs | 12 ++++++------ .../Repository/MongoRepository.Conversation.cs | 16 ++++++++++++---- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs b/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs index bfd2ae8a3..499666934 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs @@ -127,7 +127,7 @@ bool DeleteAgentCodeScripts(string agentId, List? scripts = nul #endregion #region Conversation - void CreateNewConversation(Conversation conversation) + Task CreateNewConversation(Conversation conversation) => throw new NotImplementedException(); bool DeleteConversations(IEnumerable conversationIds) => throw new NotImplementedException(); diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs index cea0ad7f6..09f4d3288 100644 --- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs +++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs @@ -112,7 +112,7 @@ public async Task NewConversation(Conversation sess) record.Tags = sess.Tags; record.Title = string.IsNullOrEmpty(record.Title) ? "New Conversation" : record.Title; - db.CreateNewConversation(record); + await db.CreateNewConversation(record); var hooks = _services.GetHooks(record.AgentId); diff --git a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs index 86d80e263..53316a04a 100644 --- a/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs +++ b/src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs @@ -8,7 +8,7 @@ public partial class FileRepository private static readonly object _dialogLock = new object(); private static readonly object _stateLock = new object(); - public void CreateNewConversation(Conversation conversation) + public async Task CreateNewConversation(Conversation conversation) { var utcNow = DateTime.UtcNow; conversation.CreatedTime = utcNow; @@ -24,31 +24,31 @@ public void CreateNewConversation(Conversation conversation) var convFile = Path.Combine(dir, CONVERSATION_FILE); if (!File.Exists(convFile)) { - File.WriteAllText(convFile, JsonSerializer.Serialize(conversation, _options)); + await File.WriteAllTextAsync(convFile, JsonSerializer.Serialize(conversation, _options)); } var dialogFile = Path.Combine(dir, DIALOG_FILE); if (!File.Exists(dialogFile)) { - File.WriteAllText(dialogFile, "[]"); + await File.WriteAllTextAsync(dialogFile, "[]"); } var stateFile = Path.Combine(dir, STATE_FILE); if (!File.Exists(stateFile)) { - File.WriteAllText(stateFile, "[]"); + await File.WriteAllTextAsync(stateFile, "[]"); } var latestStateFile = Path.Combine(dir, CONV_LATEST_STATE_FILE); if (!File.Exists(latestStateFile)) { - File.WriteAllText(latestStateFile, "{}"); + await File.WriteAllTextAsync(latestStateFile, "{}"); } var breakpointFile = Path.Combine(dir, BREAKPOINT_FILE); if (!File.Exists(breakpointFile)) { - File.WriteAllText(breakpointFile, "[]"); + await File.WriteAllTextAsync(breakpointFile, "[]"); } } diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs index 53e321c4d..e83d7b51e 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs @@ -6,7 +6,7 @@ namespace BotSharp.Plugin.MongoStorage.Repository; public partial class MongoRepository { - public void CreateNewConversation(Conversation conversation) + public async Task CreateNewConversation(Conversation conversation) { if (conversation == null) return; @@ -49,9 +49,17 @@ public void CreateNewConversation(Conversation conversation) UpdatedTime = utcNow }; - _dc.Conversations.InsertOne(convDoc); - _dc.ConversationDialogs.InsertOne(dialogDoc); - _dc.ConversationStates.InsertOne(stateDoc); + try + { + await _dc.Conversations.InsertOneAsync(convDoc); + await _dc.ConversationDialogs.InsertOneAsync(dialogDoc); + await _dc.ConversationStates.InsertOneAsync(stateDoc); + } + catch (MongoWriteException ex) when (ex.WriteError?.Code == 11000) + { + //11000 duplicate key error + return; + } } public bool DeleteConversations(IEnumerable conversationIds)