2024-02-04 05:58:52 +00:00
|
|
|
using BotSharp.Abstraction.Repositories.Filters;
|
|
|
|
|
using BotSharp.Abstraction.Tasks.Models;
|
|
|
|
|
|
|
|
|
|
namespace BotSharp.Plugin.MongoStorage.Repository;
|
|
|
|
|
|
|
|
|
|
public partial class MongoRepository
|
|
|
|
|
{
|
|
|
|
|
#region Task
|
|
|
|
|
public PagedItems<AgentTask> GetAgentTasks(AgentTaskFilter filter)
|
|
|
|
|
{
|
2024-11-13 23:16:49 +00:00
|
|
|
if (filter == null)
|
|
|
|
|
{
|
|
|
|
|
filter = AgentTaskFilter.Empty();
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-04 05:58:52 +00:00
|
|
|
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));
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-30 21:58:57 +00:00
|
|
|
if (!string.IsNullOrEmpty(filter.Status))
|
|
|
|
|
{
|
|
|
|
|
filters.Add(builder.Eq(x => x.Status, filter.Status));
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-04 20:01:56 +00:00
|
|
|
if (filter.Enabled.HasValue)
|
|
|
|
|
{
|
|
|
|
|
filters.Add(builder.Eq(x => x.Enabled, filter.Enabled.Value));
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-04 05:58:52 +00:00
|
|
|
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 });
|
|
|
|
|
|
2025-01-30 21:58:57 +00:00
|
|
|
var tasks = taskDocs.Select(x =>
|
2024-02-04 05:58:52 +00:00
|
|
|
{
|
2025-01-30 21:58:57 +00:00
|
|
|
var task = AgentTaskDocument.ToDomainModel(x);
|
|
|
|
|
task.Agent = agents.FirstOrDefault(a => a.Id == x.AgentId);
|
|
|
|
|
return task;
|
2024-02-04 05:58:52 +00:00
|
|
|
}).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);
|
|
|
|
|
|
2025-01-30 21:58:57 +00:00
|
|
|
var task = AgentTaskDocument.ToDomainModel(taskDoc);
|
|
|
|
|
task.Agent = agent;
|
2024-02-04 05:58:52 +00:00
|
|
|
return task;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void InsertAgentTask(AgentTask task)
|
|
|
|
|
{
|
2025-01-30 21:58:57 +00:00
|
|
|
var taskDoc = AgentTaskDocument.ToMongoModel(task);
|
|
|
|
|
taskDoc.Id = Guid.NewGuid().ToString();
|
2024-02-04 05:58:52 +00:00
|
|
|
_dc.AgentTasks.InsertOne(taskDoc);
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-05 20:53:18 +00:00
|
|
|
public void BulkInsertAgentTasks(List<AgentTask> tasks)
|
|
|
|
|
{
|
|
|
|
|
if (tasks.IsNullOrEmpty()) return;
|
|
|
|
|
|
2025-01-30 21:58:57 +00:00
|
|
|
var taskDocs = tasks.Select(x =>
|
2024-02-05 20:53:18 +00:00
|
|
|
{
|
2025-01-30 21:58:57 +00:00
|
|
|
var task = AgentTaskDocument.ToMongoModel(x);
|
|
|
|
|
task.Id = !string.IsNullOrEmpty(x.Id) ? x.Id : Guid.NewGuid().ToString();
|
|
|
|
|
return task;
|
2024-02-05 20:53:18 +00:00
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
|
|
_dc.AgentTasks.InsertMany(taskDocs);
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-04 20:01:56 +00:00
|
|
|
public void UpdateAgentTask(AgentTask task, AgentTaskField field)
|
|
|
|
|
{
|
|
|
|
|
if (task == null || string.IsNullOrEmpty(task.Id)) return;
|
|
|
|
|
|
|
|
|
|
var filter = Builders<AgentTaskDocument>.Filter.Eq(x => x.Id, task.Id);
|
|
|
|
|
var taskDoc = _dc.AgentTasks.Find(filter).FirstOrDefault();
|
|
|
|
|
if (taskDoc == null) return;
|
|
|
|
|
|
|
|
|
|
switch (field)
|
|
|
|
|
{
|
|
|
|
|
case AgentTaskField.Name:
|
|
|
|
|
taskDoc.Name = task.Name;
|
|
|
|
|
break;
|
|
|
|
|
case AgentTaskField.Description:
|
|
|
|
|
taskDoc.Description = task.Description;
|
|
|
|
|
break;
|
|
|
|
|
case AgentTaskField.Enabled:
|
|
|
|
|
taskDoc.Enabled = task.Enabled;
|
|
|
|
|
break;
|
|
|
|
|
case AgentTaskField.Content:
|
|
|
|
|
taskDoc.Content = task.Content;
|
|
|
|
|
break;
|
2025-01-30 21:58:57 +00:00
|
|
|
case AgentTaskField.Status:
|
|
|
|
|
taskDoc.Status = task.Status;
|
|
|
|
|
break;
|
2024-02-04 20:01:56 +00:00
|
|
|
case AgentTaskField.All:
|
|
|
|
|
taskDoc.Name = task.Name;
|
|
|
|
|
taskDoc.Description = task.Description;
|
|
|
|
|
taskDoc.Enabled = task.Enabled;
|
|
|
|
|
taskDoc.Content = task.Content;
|
2025-01-30 21:58:57 +00:00
|
|
|
taskDoc.Status = task.Status;
|
2024-02-04 20:01:56 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
taskDoc.UpdatedTime = DateTime.UtcNow;
|
|
|
|
|
_dc.AgentTasks.ReplaceOne(filter, taskDoc);
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-11 07:00:17 +00:00
|
|
|
public bool DeleteAgentTask(string agentId, List<string> taskIds)
|
2024-02-04 05:58:52 +00:00
|
|
|
{
|
2024-04-11 07:00:17 +00:00
|
|
|
if (taskIds.IsNullOrEmpty()) return false;
|
2024-02-04 05:58:52 +00:00
|
|
|
|
2024-04-11 07:00:17 +00:00
|
|
|
var builder = Builders<AgentTaskDocument>.Filter;
|
|
|
|
|
var filters = new List<FilterDefinition<AgentTaskDocument>>
|
|
|
|
|
{
|
|
|
|
|
builder.In(x => x.Id, taskIds)
|
|
|
|
|
};
|
|
|
|
|
var taskDeleted = _dc.AgentTasks.DeleteMany(builder.And(filters));
|
2024-02-04 05:58:52 +00:00
|
|
|
return taskDeleted.DeletedCount > 0;
|
|
|
|
|
}
|
2024-02-05 20:53:18 +00:00
|
|
|
|
|
|
|
|
public bool DeleteAgentTasks()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
_dc.AgentTasks.DeleteMany(Builders<AgentTaskDocument>.Filter.Empty);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-02-04 05:58:52 +00:00
|
|
|
#endregion
|
|
|
|
|
}
|