Skip to content

Commit ba96443

Browse files
authored
Merge pull request #789 from iceljc/feature/refine-cronttab
Feature/refine cronttab
2 parents b99ef1f + 275aea4 commit ba96443

File tree

10 files changed

+53
-40
lines changed

10 files changed

+53
-40
lines changed

src/Infrastructure/BotSharp.Abstraction/Crontab/Models/CrontabItem.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ namespace BotSharp.Abstraction.Crontab.Models;
22

33
public class CrontabItem : ScheduleTaskArgs
44
{
5-
[JsonPropertyName("id")]
6-
public string Id { get; set; }
7-
85
[JsonPropertyName("user_id")]
96
public string UserId { get; set; } = null!;
107

src/Infrastructure/BotSharp.Abstraction/Crontab/Models/CrontabItemFilter.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ public class CrontabItemFilter : Pagination
1111
[JsonPropertyName("conversation_ids")]
1212
public IEnumerable<string>? ConversationIds { get; set; }
1313

14-
[JsonPropertyName("titles")]
15-
public IEnumerable<string>? Titles { get; set; }
16-
1714
public CrontabItemFilter()
1815
{
1916

src/Infrastructure/BotSharp.Abstraction/Crontab/Models/ScheduleTaskArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class ScheduleTaskArgs
1212
public string Description { get; set; } = null!;
1313

1414
[JsonPropertyName("to_do_list")]
15-
public ScheduleTaskItemArgs[] Tasks { get; set; } = null!;
15+
public ScheduleTaskItemArgs[] Tasks { get; set; } = [];
1616
}
1717

1818
public class ScheduleTaskItemArgs

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public interface IBotSharpRepository : IHaveServiceProvider
147147
#endregion
148148

149149
#region Crontab
150-
bool InsertCrontabItem(CrontabItem item) => throw new NotImplementedException();
150+
bool InsertCrontabItem(CrontabItem cron) => throw new NotImplementedException();
151151
PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter) => throw new NotImplementedException();
152152
#endregion
153153
}

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

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,24 @@ namespace BotSharp.Core.Repository;
55

66
public partial class FileRepository
77
{
8-
public bool InsertCrontabItem(CrontabItem item)
8+
public bool InsertCrontabItem(CrontabItem cron)
99
{
10-
if (item == null)
10+
if (cron == null || string.IsNullOrWhiteSpace(cron.ConversationId))
1111
{
1212
return false;
1313
}
1414

1515
try
1616
{
17-
var baseDir = Path.Combine(_dbSettings.FileRepository, CRONTAB_FOLDER);
18-
item.Id = Guid.NewGuid().ToString();
19-
var dir = Path.Combine(baseDir, item.Id);
20-
21-
if (Directory.Exists(dir))
17+
var baseDir = Path.Combine(_dbSettings.FileRepository, _conversationSettings.DataDir, cron.ConversationId);
18+
if (!Directory.Exists(baseDir))
2219
{
2320
return false;
2421
}
2522

26-
Directory.CreateDirectory(dir);
27-
Thread.Sleep(50);
28-
29-
var itemFile = Path.Combine(dir, CRONTAB_FILE);
30-
var json = JsonSerializer.Serialize(item, _options);
31-
File.WriteAllText(itemFile, json);
23+
var cronFile = Path.Combine(baseDir, CRON_FILE);
24+
var json = JsonSerializer.Serialize(cron, _options);
25+
File.WriteAllText(cronFile, json);
3226
return true;
3327
}
3428
catch (Exception ex)
@@ -48,17 +42,17 @@ public PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter)
4842
}
4943

5044
var records = new List<CrontabItem>();
51-
var dir = Path.Combine(_dbSettings.FileRepository, CRONTAB_FOLDER);
45+
var baseDir = Path.Combine(_dbSettings.FileRepository, _conversationSettings.DataDir);
5246

53-
if (!Directory.Exists(dir))
47+
if (!Directory.Exists(baseDir))
5448
{
55-
Directory.CreateDirectory(dir);
49+
Directory.CreateDirectory(baseDir);
5650
}
5751

58-
var totalDirs = Directory.GetDirectories(dir);
52+
var totalDirs = Directory.GetDirectories(baseDir);
5953
foreach (var d in totalDirs)
6054
{
61-
var file = Path.Combine(d, CRONTAB_FILE);
55+
var file = Path.Combine(d, CRON_FILE);
6256
if (!File.Exists(file)) continue;
6357

6458
var json = File.ReadAllText(file);
@@ -78,10 +72,6 @@ public PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter)
7872
{
7973
matched = matched && filter.UserIds.Contains(record.UserId);
8074
}
81-
if (filter?.Titles != null)
82-
{
83-
matched = matched && filter.Titles.Contains(record.Title);
84-
}
8575

8676
if (!matched) continue;
8777

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ public partial class FileRepository : IBotSharpRepository
5555
private const string PLUGIN_CONFIG_FILE = "config.json";
5656
private const string STATS_FILE = "stats.json";
5757

58-
private const string CRONTAB_FOLDER = "crontabs";
59-
private const string CRONTAB_FILE = "crontab.json";
58+
private const string CRON_FILE = "cron.json";
6059

6160
public FileRepository(
6261
IServiceProvider services,

src/Plugins/BotSharp.Plugin.MongoStorage/Collections/CrontabItemDocument.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,21 @@ public class CrontabItemDocument : MongoBase
1111
public string Cron { get; set; }
1212
public string Title { get; set; }
1313
public string Description { get; set; }
14+
public IEnumerable<CronTaskMongoElement> Tasks { get; set; } = [];
1415
public DateTime CreatedTime { get; set; } = DateTime.UtcNow;
1516

1617
public static CrontabItem ToDomainModel(CrontabItemDocument item)
1718
{
1819
return new CrontabItem
1920
{
20-
Id = item.Id,
2121
UserId = item.UserId,
2222
AgentId = item.AgentId,
2323
ConversationId = item.ConversationId,
2424
ExecutionResult = item.ExecutionResult,
2525
Cron = item.Cron,
2626
Title = item.Title,
2727
Description = item.Description,
28+
Tasks = item.Tasks?.Select(x => CronTaskMongoElement.ToDomainElement(x))?.ToArray() ?? [],
2829
CreatedTime = item.CreatedTime
2930
};
3031
}
@@ -33,14 +34,14 @@ public static CrontabItemDocument ToMongoModel(CrontabItem item)
3334
{
3435
return new CrontabItemDocument
3536
{
36-
Id = item.Id,
3737
UserId = item.UserId,
3838
AgentId = item.AgentId,
3939
ConversationId = item.ConversationId,
4040
ExecutionResult = item.ExecutionResult,
4141
Cron = item.Cron,
4242
Title = item.Title,
4343
Description = item.Description,
44+
Tasks = item.Tasks?.Select(x => CronTaskMongoElement.ToMongoElement(x))?.ToList() ?? [],
4445
CreatedTime = item.CreatedTime
4546
};
4647
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using BotSharp.Abstraction.Crontab.Models;
2+
3+
namespace BotSharp.Plugin.MongoStorage.Models;
4+
5+
public class CronTaskMongoElement
6+
{
7+
public string Topic { get; set; }
8+
public string Script { get; set; }
9+
public string Language { get; set; }
10+
11+
public static CronTaskMongoElement ToMongoElement(ScheduleTaskItemArgs model)
12+
{
13+
return new CronTaskMongoElement
14+
{
15+
Topic = model.Topic,
16+
Script = model.Script,
17+
Language = model.Language
18+
};
19+
}
20+
21+
public static ScheduleTaskItemArgs ToDomainElement(CronTaskMongoElement model)
22+
{
23+
return new ScheduleTaskItemArgs
24+
{
25+
Topic = model.Topic,
26+
Script = model.Script,
27+
Language = model.Language
28+
};
29+
}
30+
}

src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,21 @@ public bool DeleteConversations(IEnumerable<string> conversationIds)
5656
var filterPromptLog = Builders<LlmCompletionLogDocument>.Filter.In(x => x.ConversationId, conversationIds);
5757
var filterContentLog = Builders<ConversationContentLogDocument>.Filter.In(x => x.ConversationId, conversationIds);
5858
var filterStateLog = Builders<ConversationStateLogDocument>.Filter.In(x => x.ConversationId, conversationIds);
59+
var conbTabItems = Builders<CrontabItemDocument>.Filter.In(x => x.ConversationId, conversationIds);
5960

6061
var exeLogDeleted = _dc.ExectionLogs.DeleteMany(filterExeLog);
6162
var promptLogDeleted = _dc.LlmCompletionLogs.DeleteMany(filterPromptLog);
6263
var contentLogDeleted = _dc.ContentLogs.DeleteMany(filterContentLog);
6364
var stateLogDeleted = _dc.StateLogs.DeleteMany(filterStateLog);
6465
var statesDeleted = _dc.ConversationStates.DeleteMany(filterSates);
6566
var dialogDeleted = _dc.ConversationDialogs.DeleteMany(filterDialog);
67+
var cronDeleted = _dc.CrontabItems.DeleteMany(conbTabItems);
6668
var convDeleted = _dc.Conversations.DeleteMany(filterConv);
6769

6870
return convDeleted.DeletedCount > 0 || dialogDeleted.DeletedCount > 0 || statesDeleted.DeletedCount > 0
6971
|| exeLogDeleted.DeletedCount > 0 || promptLogDeleted.DeletedCount > 0
70-
|| contentLogDeleted.DeletedCount > 0 || stateLogDeleted.DeletedCount > 0;
72+
|| contentLogDeleted.DeletedCount > 0 || stateLogDeleted.DeletedCount > 0
73+
|| convDeleted.DeletedCount > 0;
7174
}
7275

7376
[SideCar]

src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Crontab.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public bool InsertCrontabItem(CrontabItem item)
1414

1515
try
1616
{
17-
item.Id = Guid.NewGuid().ToString();
1817
var cronDoc = CrontabItemDocument.ToMongoModel(item);
18+
cronDoc.Id = Guid.NewGuid().ToString();
1919
_dc.CrontabItems.InsertOne(cronDoc);
2020
return true;
2121
}
@@ -46,10 +46,6 @@ public PagedItems<CrontabItem> GetCrontabItems(CrontabItemFilter filter)
4646
{
4747
cronFilters.Add(cronBuilder.In(x => x.ConversationId, filter.ConversationIds));
4848
}
49-
if (filter?.Titles != null)
50-
{
51-
cronFilters.Add(cronBuilder.In(x => x.Title, filter.Titles));
52-
}
5349
if (filter?.UserIds != null)
5450
{
5551
cronFilters.Add(cronBuilder.In(x => x.UserId, filter.UserIds));

0 commit comments

Comments
 (0)