diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs index b86e59161..87d8f4156 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Agents/IAgentService.cs @@ -10,7 +10,7 @@ namespace BotSharp.Abstraction.Agents; public interface IAgentService { Task CreateAgent(Agent agent); - Task RefreshAgents(); + Task RefreshAgents(IEnumerable? agentIds = null); Task> GetAgents(AgentFilter filter); Task> GetAgentOptions(List? agentIds = null, bool byName = false); Task> GetAgentUtilityOptions(); diff --git a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.RefreshAgents.cs b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.RefreshAgents.cs index 9603d1e50..506e00bb6 100644 --- a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.RefreshAgents.cs +++ b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.RefreshAgents.cs @@ -6,7 +6,7 @@ namespace BotSharp.Core.Agents.Services; public partial class AgentService { - public async Task RefreshAgents() + public async Task RefreshAgents(IEnumerable? agentIds = null) { string refreshResult; var dbSettings = _services.GetRequiredService(); @@ -28,7 +28,13 @@ public async Task RefreshAgents() } var refreshedAgents = new List(); - foreach (var dir in Directory.GetDirectories(agentDir)) + var dirs = Directory.GetDirectories(agentDir); + if (!agentIds.IsNullOrEmpty()) + { + dirs = dirs.Where(x => agentIds.Contains(x.Split(Path.DirectorySeparatorChar).Last())).ToArray(); + } + + foreach (var dir in dirs) { try { @@ -78,7 +84,7 @@ public async Task RefreshAgents() } else { - refreshResult = "No agent gets refreshed!"; + refreshResult = "No agent gets migrated!"; } _logger.LogInformation(refreshResult); diff --git a/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs b/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs index 2b2a72f66..4543fe19e 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/Controllers/AgentController.cs @@ -111,9 +111,9 @@ public async Task CreateAgent(AgentCreationModel agent) [BotSharpAuth] [HttpPost("/refresh-agents")] - public async Task RefreshAgents() + public async Task RefreshAgents([FromBody] AgentMigrationModel request) { - return await _agentService.RefreshAgents(); + return await _agentService.RefreshAgents(request?.AgentIds); } [HttpPut("/agent/file/{agentId}")] diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Agents/Request/AgentMigrationModel.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Agents/Request/AgentMigrationModel.cs new file mode 100644 index 000000000..19053c651 --- /dev/null +++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Agents/Request/AgentMigrationModel.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; + +namespace BotSharp.OpenAPI.ViewModels.Agents; + +public class AgentMigrationModel +{ + [JsonPropertyName("agent_ids")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public IEnumerable? AgentIds { get; set; } +}