diff --git a/src/Infrastructure/BotSharp.Abstraction/Plugins/Models/PluginFilter.cs b/src/Infrastructure/BotSharp.Abstraction/Plugins/Models/PluginFilter.cs new file mode 100644 index 000000000..bc5c4bf2e --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/Plugins/Models/PluginFilter.cs @@ -0,0 +1,7 @@ +namespace BotSharp.Abstraction.Plugins.Models +{ + public class PluginFilter + { + public Pagination Pager { get; set; } = new Pagination(); + } +} diff --git a/src/Infrastructure/BotSharp.Core/Plugins/PluginLoader.cs b/src/Infrastructure/BotSharp.Core/Plugins/PluginLoader.cs index 98d934cb4..0d54f4af3 100644 --- a/src/Infrastructure/BotSharp.Core/Plugins/PluginLoader.cs +++ b/src/Infrastructure/BotSharp.Core/Plugins/PluginLoader.cs @@ -89,6 +89,18 @@ public List GetPlugins(IServiceProvider services) return _plugins; } + public PagedItems GetPagedPlugins(IServiceProvider services, PluginFilter filter) + { + var plugins = GetPlugins(services); + var pager = filter?.Pager ?? new Pagination(); + + return new PagedItems + { + Items = plugins.Skip(pager.Offset).Take(pager.Size), + Count = plugins.Count() + }; + } + public PluginDef UpdatePluginStatus(IServiceProvider services, string id, bool enable) { var plugin = _plugins.First(x => x.Id == id); diff --git a/src/Infrastructure/BotSharp.OpenAPI/Controllers/PluginController.cs b/src/Infrastructure/BotSharp.OpenAPI/Controllers/PluginController.cs index 01c2dda22..366128527 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/Controllers/PluginController.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/Controllers/PluginController.cs @@ -16,11 +16,11 @@ public PluginController(IServiceProvider services, PluginSettings settings) _settings = settings; } - [HttpGet("/plugins")] - public List GetPlugins() + [HttpPost("/plugins")] + public PagedItems GetPlugins([FromBody] PluginFilter filter) { var loader = _services.GetRequiredService(); - return loader.GetPlugins(_services); + return loader.GetPagedPlugins(_services, filter); } [HttpGet("/plugin/menu")]