refine code

This commit is contained in:
Jicheng Lu 2024-02-03 23:58:52 -06:00
parent 326bcd2355
commit 9ea4b0209a
4 changed files with 109 additions and 100 deletions

View file

@ -95,9 +95,7 @@ public partial class FileRepository
UpdatedDateTime = DateTime.UtcNow
};
var prefix = "#metadata";
var postfix = "/metadata";
var fileContent = $"{prefix}\n{JsonSerializer.Serialize(model, _options)}\n{postfix}\n\n{task.Content}";
var fileContent = $"{AGENT_TASK_PREFIX}\n{JsonSerializer.Serialize(model, _options)}\n{AGENT_TASK_SUFFIX}\n\n{task.Content}";
File.WriteAllText(taskFile, fileContent);
}

View file

@ -33,6 +33,8 @@ public partial class FileRepository : IBotSharpRepository
private const string STATE_FILE = "state.json";
private const string EXECUTION_LOG_FILE = "execution.log";
private const string PLUGIN_CONFIG_FILE = "config.json";
private const string AGENT_TASK_PREFIX = "#metadata";
private const string AGENT_TASK_SUFFIX = "/metadata";
public FileRepository(
IServiceProvider services,
@ -293,7 +295,8 @@ public partial class FileRepository : IBotSharpRepository
var fileName = taskFile.Split(Path.DirectorySeparatorChar).Last();
var id = fileName.Split('.').First();
var data = File.ReadAllText(taskFile);
var metaData = Regex.Match(data, @"#metadata.+/metadata", RegexOptions.Singleline);
var pattern = $@"{AGENT_TASK_PREFIX}.+{AGENT_TASK_SUFFIX}";
var metaData = Regex.Match(data, pattern, RegexOptions.Singleline);
if (!metaData.Success) return null;
@ -301,8 +304,9 @@ public partial class FileRepository : IBotSharpRepository
if (task == null) return null;
task.Id = id;
var content = Regex.Match(data, @"/metadata.+", RegexOptions.Singleline).Value;
task.Content = content.Substring(9).Trim();
pattern = $@"{AGENT_TASK_SUFFIX}.+";
var content = Regex.Match(data, pattern, RegexOptions.Singleline).Value;
task.Content = content.Substring(AGENT_TASK_SUFFIX.Length).Trim();
return task;
}

View file

@ -335,100 +335,6 @@ public partial class MongoRepository
return agent.Templates?.FirstOrDefault(x => x.Name == templateName.ToLower())?.Content ?? string.Empty;
}
#region Task
public PagedItems<AgentTask> GetAgentTasks(AgentTaskFilter filter)
{
var pager = filter.Pager ?? new Pagination();
var builder = Builders<AgentTaskDocument>.Filter;
var filters = new List<FilterDefinition<AgentTaskDocument>>() { builder.Empty };
if (!string.IsNullOrEmpty(filter.AgentId))
{
filters.Add(builder.Eq(x => x.AgentId, filter.AgentId));
}
var filterDef = builder.And(filters);
var sortDef = Builders<AgentTaskDocument>.Sort.Descending(x => x.CreatedTime);
var totalTasks = _dc.AgentTasks.CountDocuments(filterDef);
var taskDocs = _dc.AgentTasks.Find(filterDef).Sort(sortDef).Skip(pager.Offset).Limit(pager.Size).ToList();
var agentIds = taskDocs.Select(x => x.AgentId).Distinct().ToList();
var agents = GetAgents(new AgentFilter { AgentIds = agentIds });
var tasks = taskDocs.Select(x => new AgentTask
{
Id = x.Id,
Name = x.Name,
Description = x.Description,
Enabled = x.Enabled,
AgentId = x.AgentId,
Content = x.Content,
CreatedDateTime = x.CreatedTime,
UpdatedDateTime = x.UpdatedTime,
Agent = agents.FirstOrDefault(a => a.Id == x.AgentId)
}).ToList();
return new PagedItems<AgentTask>
{
Items = tasks,
Count = (int)totalTasks
};
}
public AgentTask? GetAgentTask(string agentId, string taskId)
{
if (string.IsNullOrEmpty(taskId)) return null;
var taskDoc = _dc.AgentTasks.AsQueryable().FirstOrDefault(x => x.Id == taskId);
if (taskDoc == null) return null;
var agentDoc = _dc.Agents.AsQueryable().FirstOrDefault(x => x.Id == taskDoc.AgentId);
var agent = TransformAgentDocument(agentDoc);
var task = new AgentTask
{
Id = taskDoc.Id,
Name = taskDoc.Name,
Description = taskDoc.Description,
Enabled = taskDoc.Enabled,
AgentId = taskDoc.AgentId,
Content = taskDoc.Content,
CreatedDateTime = taskDoc.CreatedTime,
UpdatedDateTime = taskDoc.UpdatedTime,
Agent = agent
};
return task;
}
public void InsertAgentTask(AgentTask task)
{
var taskDoc = new AgentTaskDocument
{
Id = Guid.NewGuid().ToString(),
Name = task.Name,
Description = task.Description,
Enabled = task.Enabled,
AgentId = task.AgentId,
Content = task.Content,
CreatedTime = DateTime.UtcNow,
UpdatedTime = DateTime.UtcNow
};
_dc.AgentTasks.InsertOne(taskDoc);
}
public bool DeleteAgentTask(string agentId, string taskId)
{
if (string.IsNullOrEmpty(taskId)) return false;
var filter = Builders<AgentTaskDocument>.Filter.Eq(x => x.Id, taskId);
var taskDeleted = _dc.AgentTasks.DeleteOne(filter);
return taskDeleted.DeletedCount > 0;
}
#endregion
public void BulkInsertAgents(List<Agent> agents)
{
if (agents.IsNullOrEmpty()) return;

View file

@ -0,0 +1,101 @@
using BotSharp.Abstraction.Repositories.Filters;
using BotSharp.Abstraction.Tasks.Models;
using BotSharp.Plugin.MongoStorage.Collections;
namespace BotSharp.Plugin.MongoStorage.Repository;
public partial class MongoRepository
{
#region Task
public PagedItems<AgentTask> GetAgentTasks(AgentTaskFilter filter)
{
var pager = filter.Pager ?? new Pagination();
var builder = Builders<AgentTaskDocument>.Filter;
var filters = new List<FilterDefinition<AgentTaskDocument>>() { builder.Empty };
if (!string.IsNullOrEmpty(filter.AgentId))
{
filters.Add(builder.Eq(x => x.AgentId, filter.AgentId));
}
var filterDef = builder.And(filters);
var sortDef = Builders<AgentTaskDocument>.Sort.Descending(x => x.CreatedTime);
var totalTasks = _dc.AgentTasks.CountDocuments(filterDef);
var taskDocs = _dc.AgentTasks.Find(filterDef).Sort(sortDef).Skip(pager.Offset).Limit(pager.Size).ToList();
var agentIds = taskDocs.Select(x => x.AgentId).Distinct().ToList();
var agents = GetAgents(new AgentFilter { AgentIds = agentIds });
var tasks = taskDocs.Select(x => new AgentTask
{
Id = x.Id,
Name = x.Name,
Description = x.Description,
Enabled = x.Enabled,
AgentId = x.AgentId,
Content = x.Content,
CreatedDateTime = x.CreatedTime,
UpdatedDateTime = x.UpdatedTime,
Agent = agents.FirstOrDefault(a => a.Id == x.AgentId)
}).ToList();
return new PagedItems<AgentTask>
{
Items = tasks,
Count = (int)totalTasks
};
}
public AgentTask? GetAgentTask(string agentId, string taskId)
{
if (string.IsNullOrEmpty(taskId)) return null;
var taskDoc = _dc.AgentTasks.AsQueryable().FirstOrDefault(x => x.Id == taskId);
if (taskDoc == null) return null;
var agentDoc = _dc.Agents.AsQueryable().FirstOrDefault(x => x.Id == taskDoc.AgentId);
var agent = TransformAgentDocument(agentDoc);
var task = new AgentTask
{
Id = taskDoc.Id,
Name = taskDoc.Name,
Description = taskDoc.Description,
Enabled = taskDoc.Enabled,
AgentId = taskDoc.AgentId,
Content = taskDoc.Content,
CreatedDateTime = taskDoc.CreatedTime,
UpdatedDateTime = taskDoc.UpdatedTime,
Agent = agent
};
return task;
}
public void InsertAgentTask(AgentTask task)
{
var taskDoc = new AgentTaskDocument
{
Id = Guid.NewGuid().ToString(),
Name = task.Name,
Description = task.Description,
Enabled = task.Enabled,
AgentId = task.AgentId,
Content = task.Content,
CreatedTime = DateTime.UtcNow,
UpdatedTime = DateTime.UtcNow
};
_dc.AgentTasks.InsertOne(taskDoc);
}
public bool DeleteAgentTask(string agentId, string taskId)
{
if (string.IsNullOrEmpty(taskId)) return false;
var filter = Builders<AgentTaskDocument>.Filter.Eq(x => x.Id, taskId);
var taskDeleted = _dc.AgentTasks.DeleteOne(filter);
return taskDeleted.DeletedCount > 0;
}
#endregion
}