Skip to content

Commit cd7fdf4

Browse files
authored
Merge pull request #795 from GreenShadeZhang/dev_title_alias
Add Conversation Title Alias
2 parents b110900 + 96eac1f commit cd7fdf4

File tree

12 files changed

+87
-0
lines changed

12 files changed

+87
-0
lines changed

src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public interface IConversationService
1212
Task<Conversation> GetConversation(string id);
1313
Task<PagedItems<Conversation>> GetConversations(ConversationFilter filter);
1414
Task<Conversation> UpdateConversationTitle(string id, string title);
15+
Task<Conversation> UpdateConversationTitleAlias(string id, string titleAlias);
1516
Task<bool> UpdateConversationTags(string conversationId, List<string> tags);
1617
Task<bool> UpdateConversationMessage(string conversationId, UpdateMessageRequest request);
1718
Task<List<Conversation>> GetLastConversations();

src/Infrastructure/BotSharp.Abstraction/Conversations/Models/Conversation.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class Conversation
1313
/// </summary>
1414
public string? TaskId { get; set; }
1515
public string Title { get; set; } = string.Empty;
16+
public string TitleAlias { get; set; } = string.Empty;
1617

1718
[JsonIgnore]
1819
public List<DialogElement> Dialogs { get; set; } = new();

src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class ConversationFilter
88
/// </summary>
99
public string? Id { get; set; }
1010
public string? Title { get; set; }
11+
public string? TitleAlias { get; set; }
1112
public string? AgentId { get; set; }
1213
public string? Status { get; set; }
1314
public string? Channel { get; set; }

src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public interface IBotSharpRepository : IHaveServiceProvider
8686
Conversation GetConversation(string conversationId);
8787
PagedItems<Conversation> GetConversations(ConversationFilter filter);
8888
void UpdateConversationTitle(string conversationId, string title);
89+
void UpdateConversationTitleAlias(string conversationId, string titleAlias);
8990
bool UpdateConversationTags(string conversationId, List<string> tags);
9091
bool UpdateConversationMessage(string conversationId, UpdateMessageRequest request);
9192
void UpdateConversationBreakpoint(string conversationId, ConversationBreakpoint breakpoint);

src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ public async Task<Conversation> UpdateConversationTitle(string id, string title)
5151
return conversation;
5252
}
5353

54+
public async Task<Conversation> UpdateConversationTitleAlias(string id, string titleAlias)
55+
{
56+
var db = _services.GetRequiredService<IBotSharpRepository>();
57+
db.UpdateConversationTitleAlias(id, titleAlias);
58+
var conversation = db.GetConversation(id);
59+
return conversation;
60+
}
61+
5462
public async Task<bool> UpdateConversationTags(string conversationId, List<string> tags)
5563
{
5664
var db = _services.GetRequiredService<IBotSharpRepository>();

src/Infrastructure/BotSharp.Core/Repository/BotSharpDbContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ public void AppendConversationDialogs(string conversationId, List<DialogElement>
105105

106106
public void UpdateConversationTitle(string conversationId, string title)
107107
=> throw new NotImplementedException();
108+
public void UpdateConversationTitleAlias(string conversationId, string titleAlias)
109+
=> throw new NotImplementedException();
108110

109111
public bool UpdateConversationTags(string conversationId, List<string> tags)
110112
=> throw new NotImplementedException();

src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Conversation.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,22 @@ public void UpdateConversationTitle(string conversationId, string title)
134134
}
135135
}
136136
}
137+
public void UpdateConversationTitleAlias(string conversationId, string titleAlias)
138+
{
139+
var convDir = FindConversationDirectory(conversationId);
140+
if (!string.IsNullOrEmpty(convDir))
141+
{
142+
var convFile = Path.Combine(convDir, CONVERSATION_FILE);
143+
var content = File.ReadAllText(convFile);
144+
var record = JsonSerializer.Deserialize<Conversation>(content, _options);
145+
if (record != null)
146+
{
147+
record.TitleAlias = titleAlias;
148+
record.UpdatedTime = DateTime.UtcNow;
149+
File.WriteAllText(convFile, JsonSerializer.Serialize(record, _options));
150+
}
151+
}
152+
}
137153

138154
public bool UpdateConversationTags(string conversationId, List<string> tags)
139155
{
@@ -356,6 +372,10 @@ public PagedItems<Conversation> GetConversations(ConversationFilter filter)
356372
{
357373
matched = matched && record.Title.Contains(filter.Title);
358374
}
375+
if (filter?.TitleAlias != null)
376+
{
377+
matched = matched && record.TitleAlias.Contains(filter.TitleAlias);
378+
}
359379
if (filter?.AgentId != null)
360380
{
361381
matched = matched && record.AgentId == filter.AgentId;

src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,30 @@ public async Task<bool> UpdateConversationTitle([FromRoute] string conversationI
223223
return response != null;
224224
}
225225

226+
[HttpPut("/conversation/{conversationId}/update-title-alias")]
227+
public async Task<bool> UpdateConversationTitleAlias([FromRoute] string conversationId, [FromBody] UpdateConversationTitleAliasModel newTile)
228+
{
229+
var userService = _services.GetRequiredService<IUserService>();
230+
var conversationService = _services.GetRequiredService<IConversationService>();
231+
232+
var user = await userService.GetUser(_user.Id);
233+
var filter = new ConversationFilter
234+
{
235+
Id = conversationId,
236+
UserId = user.Role != UserRole.Admin ? user.Id : null
237+
};
238+
var conversations = await conversationService.GetConversations(filter);
239+
240+
if (conversations.Items.IsNullOrEmpty())
241+
{
242+
return false;
243+
}
244+
245+
var response = await conversationService.UpdateConversationTitleAlias(conversationId, newTile.NewTitleAlias);
246+
return response != null;
247+
}
248+
249+
226250
[HttpPut("/conversation/{conversationId}/update-tags")]
227251
public async Task<bool> UpdateConversationTags([FromRoute] string conversationId, [FromBody] UpdateConversationRequest request)
228252
{

src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ConversationViewModel.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ public class ConversationViewModel
1515
[JsonPropertyName("title")]
1616
public string Title { get; set; } = string.Empty;
1717

18+
[JsonPropertyName("title_alias")]
19+
public string TitleAlias { get; set; } = string.Empty;
20+
1821
public UserViewModel User { get; set; } = new UserViewModel();
1922

2023
public string Event { get; set; }
@@ -48,6 +51,7 @@ public static ConversationViewModel FromSession(Conversation sess)
4851
},
4952
AgentId = sess.AgentId,
5053
Title = sess.Title,
54+
TitleAlias = sess.TitleAlias,
5155
Channel = sess.Channel,
5256
Status = sess.Status,
5357
TaskId = sess.TaskId,
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace BotSharp.OpenAPI.ViewModels.Conversations;
4+
5+
public class UpdateConversationTitleAliasModel
6+
{
7+
[Required]
8+
public string NewTitleAlias { get; set; }
9+
}

0 commit comments

Comments
 (0)