Merge pull request #288 from iceljc/features/add-agent-task-mongo
add direct agent id
This commit is contained in:
commit
834b4e5caf
|
|
@ -25,5 +25,6 @@ public enum AgentTaskField
|
|||
Name,
|
||||
Description,
|
||||
Enabled,
|
||||
Content
|
||||
Content,
|
||||
DirectAgentId
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,9 @@
|
|||
namespace BotSharp.Abstraction.Tasks.Models;
|
||||
|
||||
public class AgentTask
|
||||
public class AgentTask : AgentTaskMetaData
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string Content { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public string? DirectAgentId { get; set; }
|
||||
public DateTime CreatedDateTime { get; set; }
|
||||
public DateTime UpdatedDateTime { get; set; }
|
||||
|
||||
[JsonIgnore(Condition = JsonIgnoreCondition.Always)]
|
||||
public string AgentId { get; set; }
|
||||
|
|
@ -29,3 +23,13 @@ public class AgentTask
|
|||
Description = description;
|
||||
}
|
||||
}
|
||||
|
||||
public class AgentTaskMetaData
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public string? DirectAgentId { get; set; }
|
||||
public DateTime CreatedDateTime { get; set; }
|
||||
public DateTime UpdatedDateTime { get; set; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,12 +2,34 @@ namespace BotSharp.Abstraction.Utilities;
|
|||
|
||||
public class Pagination
|
||||
{
|
||||
public int Page { get; set; } = 1;
|
||||
/// <summary>
|
||||
/// Use -1 for all records
|
||||
/// </summary>
|
||||
public int Size { get; set; } = 20;
|
||||
public int Offset => (Page - 1) * Size;
|
||||
private int _page;
|
||||
private int _size;
|
||||
|
||||
public int Page
|
||||
{
|
||||
get { return _page > 0 ? _page : 1; }
|
||||
set { _page = value; }
|
||||
}
|
||||
|
||||
public int Size
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_size <= 0) return 20;
|
||||
if (_size > 100) return 100;
|
||||
|
||||
return _size;
|
||||
}
|
||||
set
|
||||
{
|
||||
_size = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int Offset
|
||||
{
|
||||
get { return (Page - 1) * Size; }
|
||||
}
|
||||
}
|
||||
|
||||
public class PagedItems<T>
|
||||
|
|
|
|||
|
|
@ -116,17 +116,17 @@ public partial class FileRepository
|
|||
|
||||
var fileName = $"{Guid.NewGuid()}.liquid";
|
||||
var taskFile = Path.Combine(taskDir, fileName);
|
||||
|
||||
var model = new AgentTaskFileModel
|
||||
var metaData = new AgentTaskMetaData
|
||||
{
|
||||
Name = task.Name,
|
||||
Description = task.Description,
|
||||
Enabled = task.Enabled,
|
||||
DirectAgentId = task.DirectAgentId,
|
||||
CreatedDateTime = DateTime.UtcNow,
|
||||
UpdatedDateTime = DateTime.UtcNow
|
||||
};
|
||||
|
||||
var fileContent = BuildAgentTaskFileContent(model, task.Content);
|
||||
var fileContent = BuildAgentTaskFileContent(metaData, task.Content);
|
||||
File.WriteAllText(taskFile, fileContent);
|
||||
}
|
||||
|
||||
|
|
@ -146,11 +146,12 @@ public partial class FileRepository
|
|||
var parsedTask = ParseAgentTask(taskFile);
|
||||
if (parsedTask == null) return;
|
||||
|
||||
var model = new AgentTaskFileModel
|
||||
var metaData = new AgentTaskMetaData
|
||||
{
|
||||
Name = parsedTask.Name,
|
||||
Description = parsedTask.Description,
|
||||
Enabled = parsedTask.Enabled,
|
||||
DirectAgentId = parsedTask.DirectAgentId,
|
||||
CreatedDateTime = parsedTask.CreatedDateTime,
|
||||
UpdatedDateTime = DateTime.UtcNow
|
||||
};
|
||||
|
|
@ -159,26 +160,30 @@ public partial class FileRepository
|
|||
switch (field)
|
||||
{
|
||||
case AgentTaskField.Name:
|
||||
model.Name = task.Name;
|
||||
metaData.Name = task.Name;
|
||||
break;
|
||||
case AgentTaskField.Description:
|
||||
model.Description = task.Description;
|
||||
metaData.Description = task.Description;
|
||||
break;
|
||||
case AgentTaskField.Enabled:
|
||||
model.Enabled = task.Enabled;
|
||||
metaData.Enabled = task.Enabled;
|
||||
break;
|
||||
case AgentTaskField.DirectAgentId:
|
||||
metaData.DirectAgentId = task.DirectAgentId;
|
||||
break;
|
||||
case AgentTaskField.Content:
|
||||
content = task.Content;
|
||||
break;
|
||||
case AgentTaskField.All:
|
||||
model.Name = task.Name;
|
||||
model.Description = task.Description;
|
||||
model.Enabled = task.Enabled;
|
||||
metaData.Name = task.Name;
|
||||
metaData.Description = task.Description;
|
||||
metaData.Enabled = task.Enabled;
|
||||
metaData.DirectAgentId = task.DirectAgentId;
|
||||
content = task.Content;
|
||||
break;
|
||||
}
|
||||
|
||||
var fileContent = BuildAgentTaskFileContent(model, content);
|
||||
var fileContent = BuildAgentTaskFileContent(metaData, content);
|
||||
File.WriteAllText(taskFile, fileContent);
|
||||
}
|
||||
|
||||
|
|
@ -211,18 +216,9 @@ public partial class FileRepository
|
|||
return taskFile;
|
||||
}
|
||||
|
||||
private string BuildAgentTaskFileContent(AgentTaskFileModel fileModel, string taskContent)
|
||||
private string BuildAgentTaskFileContent(AgentTaskMetaData metaData, string taskContent)
|
||||
{
|
||||
return $"{AGENT_TASK_PREFIX}\n{JsonSerializer.Serialize(fileModel, _options)}\n{AGENT_TASK_SUFFIX}\n\n{taskContent}";
|
||||
return $"{AGENT_TASK_PREFIX}\n{JsonSerializer.Serialize(metaData, _options)}\n{AGENT_TASK_SUFFIX}\n\n{taskContent}";
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
internal class AgentTaskFileModel
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public DateTime CreatedDateTime { get; set; }
|
||||
public DateTime UpdatedDateTime { get; set; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ public class AgentTaskService : IAgentTaskService
|
|||
_services = services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get agent tasks using pagination
|
||||
/// </summary>
|
||||
/// <param name="filter"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<PagedItems<AgentTask>> GetTasks(AgentTaskFilter filter)
|
||||
{
|
||||
var db = _services.GetRequiredService<IBotSharpRepository>();
|
||||
|
|
@ -20,6 +25,12 @@ public class AgentTaskService : IAgentTaskService
|
|||
return await Task.FromResult(pagedTasks);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get an agent task
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="taskId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<AgentTask?> GetTask(string agentId, string taskId)
|
||||
{
|
||||
var db = _services.GetRequiredService<IBotSharpRepository>();
|
||||
|
|
@ -27,6 +38,11 @@ public class AgentTaskService : IAgentTaskService
|
|||
return await Task.FromResult(task);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new agent task
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
public async Task CreateTask(AgentTask task)
|
||||
{
|
||||
var db = _services.GetRequiredService<IBotSharpRepository>();
|
||||
|
|
@ -34,6 +50,12 @@ public class AgentTaskService : IAgentTaskService
|
|||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update an agent task by a single field or all fields
|
||||
/// </summary>
|
||||
/// <param name="task"></param>
|
||||
/// <param name="field"></param>
|
||||
/// <returns></returns>
|
||||
public async Task UpdateTask(AgentTask task, AgentTaskField field)
|
||||
{
|
||||
var db = _services.GetRequiredService<IBotSharpRepository>();
|
||||
|
|
@ -41,6 +63,12 @@ public class AgentTaskService : IAgentTaskService
|
|||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete an agent task
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="taskId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> DeleteTask(string agentId, string taskId)
|
||||
{
|
||||
var db = _services.GetRequiredService<IBotSharpRepository>();
|
||||
|
|
|
|||
|
|
@ -15,6 +15,12 @@ public class AgentTaskController : ControllerBase
|
|||
_services = services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get an agent task
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="taskId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("/agent/{agentId}/task/{taskId}")]
|
||||
public async Task<AgentTaskViewModel> GetAgentTask([FromRoute] string agentId, [FromRoute] string taskId)
|
||||
{
|
||||
|
|
@ -24,6 +30,11 @@ public class AgentTaskController : ControllerBase
|
|||
return AgentTaskViewModel.From(task);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get agent tasks by pagination
|
||||
/// </summary>
|
||||
/// <param name="filter"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("/agent/tasks")]
|
||||
public async Task<PagedItems<AgentTaskViewModel>> GetAgentTasks([FromQuery] AgentTaskFilter filter)
|
||||
{
|
||||
|
|
@ -35,6 +46,12 @@ public class AgentTaskController : ControllerBase
|
|||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new agent task
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("/agent/{agentId}/task")]
|
||||
public async Task CreateAgentTask([FromRoute] string agentId, [FromBody] AgentTaskCreateModel task)
|
||||
{
|
||||
|
|
@ -43,6 +60,13 @@ public class AgentTaskController : ControllerBase
|
|||
await _agentTaskService.CreateTask(agentTask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update an agent task
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="taskId"></param>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("/agent/{agentId}/task/{taskId}")]
|
||||
public async Task UpdateAgentTask([FromRoute] string agentId, [FromRoute] string taskId, [FromBody] AgentTaskUpdateModel task)
|
||||
{
|
||||
|
|
@ -52,6 +76,14 @@ public class AgentTaskController : ControllerBase
|
|||
await _agentTaskService.UpdateTask(agentTask, AgentTaskField.All);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update an agent task by a single field
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="taskId"></param>
|
||||
/// <param name="field"></param>
|
||||
/// <param name="task"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPatch("/agent/{agentId}/task/{taskId}/{field}")]
|
||||
public async Task PatchAgentTaskByField([FromRoute] string agentId, [FromRoute] string taskId, [FromRoute] AgentTaskField field, [FromBody] AgentTaskUpdateModel task)
|
||||
{
|
||||
|
|
@ -61,6 +93,12 @@ public class AgentTaskController : ControllerBase
|
|||
await _agentTaskService.UpdateTask(agentTask, field);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete an agent task
|
||||
/// </summary>
|
||||
/// <param name="agentId"></param>
|
||||
/// <param name="taskId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("/agent/{agentId}/task/{taskId}")]
|
||||
public async Task<bool> DeleteAgentTask([FromRoute] string agentId, [FromRoute] string taskId)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ public class AgentTaskCreateModel
|
|||
public string? Description { get; set; }
|
||||
public string Content { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public string? DirectAgentId { get; set; }
|
||||
|
||||
public AgentTask ToAgentTask()
|
||||
{
|
||||
|
|
@ -16,7 +17,8 @@ public class AgentTaskCreateModel
|
|||
Name = Name,
|
||||
Description = Description,
|
||||
Content = Content,
|
||||
Enabled = Enabled
|
||||
Enabled = Enabled,
|
||||
DirectAgentId = DirectAgentId
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ public class AgentTaskUpdateModel
|
|||
public string? Description { get; set; }
|
||||
public string? Content { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public string? DirectAgentId { get; set; }
|
||||
|
||||
public AgentTask ToAgentTask()
|
||||
{
|
||||
|
|
@ -16,7 +17,8 @@ public class AgentTaskUpdateModel
|
|||
Name = Name,
|
||||
Description = Description,
|
||||
Content = Content,
|
||||
Enabled = Enabled
|
||||
Enabled = Enabled,
|
||||
DirectAgentId = DirectAgentId
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,9 +32,9 @@ public class AgentTaskViewModel
|
|||
Enabled = task.Enabled,
|
||||
AgentId = task.AgentId,
|
||||
AgentName = task.Agent?.Name,
|
||||
DirectAgentId = task?.DirectAgentId,
|
||||
CreatedDateTime = task.CreatedDateTime,
|
||||
UpdatedDateTime = task.UpdatedDateTime,
|
||||
DirectAgentId = task?.DirectAgentId
|
||||
UpdatedDateTime = task.UpdatedDateTime
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ public class AgentTaskDocument : MongoBase
|
|||
public string Content { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public string AgentId { get; set; }
|
||||
public string? DirectAgentId { get; set; }
|
||||
public DateTime CreatedTime { get; set; }
|
||||
public DateTime UpdatedTime { get; set; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ public partial class MongoRepository
|
|||
Description = x.Description,
|
||||
Enabled = x.Enabled,
|
||||
AgentId = x.AgentId,
|
||||
DirectAgentId = x.DirectAgentId,
|
||||
Content = x.Content,
|
||||
CreatedDateTime = x.CreatedTime,
|
||||
UpdatedDateTime = x.UpdatedTime,
|
||||
|
|
@ -68,6 +69,7 @@ public partial class MongoRepository
|
|||
Description = taskDoc.Description,
|
||||
Enabled = taskDoc.Enabled,
|
||||
AgentId = taskDoc.AgentId,
|
||||
DirectAgentId = taskDoc.DirectAgentId,
|
||||
Content = taskDoc.Content,
|
||||
CreatedDateTime = taskDoc.CreatedTime,
|
||||
UpdatedDateTime = taskDoc.UpdatedTime,
|
||||
|
|
@ -86,6 +88,7 @@ public partial class MongoRepository
|
|||
Description = task.Description,
|
||||
Enabled = task.Enabled,
|
||||
AgentId = task.AgentId,
|
||||
DirectAgentId = task.DirectAgentId,
|
||||
Content = task.Content,
|
||||
CreatedTime = DateTime.UtcNow,
|
||||
UpdatedTime = DateTime.UtcNow
|
||||
|
|
@ -116,11 +119,15 @@ public partial class MongoRepository
|
|||
case AgentTaskField.Content:
|
||||
taskDoc.Content = task.Content;
|
||||
break;
|
||||
case AgentTaskField.DirectAgentId:
|
||||
taskDoc.DirectAgentId = task.DirectAgentId;
|
||||
break;
|
||||
case AgentTaskField.All:
|
||||
taskDoc.Name = task.Name;
|
||||
taskDoc.Description = task.Description;
|
||||
taskDoc.Enabled = task.Enabled;
|
||||
taskDoc.Content = task.Content;
|
||||
taskDoc.DirectAgentId = task.DirectAgentId;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue