From 4825a51f806b560a63061f8274ab3ef98368f742 Mon Sep 17 00:00:00 2001 From: Gil Zhang Date: Thu, 22 Aug 2024 12:00:36 +0800 Subject: [PATCH] Implement conversation mongodb field sorting --- .../MongoRepository.Conversation.cs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs index 88163b60..59fe4dad 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs @@ -284,6 +284,22 @@ public partial class MongoRepository var filterDef = convBuilder.And(convFilters); var sortDef = Builders.Sort.Descending(x => x.CreatedTime); var pager = filter?.Pager ?? new Pagination(); + + // Apply sorting based on sort and order fields + if (!string.IsNullOrEmpty(pager?.Sort)) + { + var sortField = ConvertSnakeCaseToPascalCase(pager.Sort); + + if (pager.Order == "asc") + { + sortDef = Builders.Sort.Ascending(sortField); + } + else if (pager.Order == "desc") + { + sortDef = Builders.Sort.Descending(sortField); + } + } + var conversationDocs = _dc.Conversations.Find(filterDef).Sort(sortDef).Skip(pager.Offset).Limit(pager.Size).ToList(); var count = _dc.Conversations.CountDocuments(filterDef); @@ -479,4 +495,22 @@ public partial class MongoRepository return deletedMessageIds; } + + private string ConvertSnakeCaseToPascalCase(string snakeCase) + { + string[] words = snakeCase.Split('_'); + StringBuilder pascalCase = new(); + + foreach (string word in words) + { + if (!string.IsNullOrEmpty(word)) + { + string firstLetter = word[..1].ToUpper(); + string restOfWord = word[1..].ToLower(); + pascalCase.Append(firstLetter + restOfWord); + } + } + + return pascalCase.ToString(); + } }