From d732fc4bbe02a21d61d9e8dd326f7616d3fdac0a Mon Sep 17 00:00:00 2001 From: vitalii-bezuhlyi Date: Thu, 5 Sep 2024 15:10:40 +0300 Subject: [PATCH] Fixed query parameters --- Apps.XTM/Actions/ProjectActions.cs | 15 +++++++++++---- Apps.XTM/DataSourceHandlers/ProjectDataHandler.cs | 3 ++- .../Request/Projects/ListProjectsRequest.cs | 9 +++++++++ Apps.XTM/Utils/DictionaryHelpers.cs | 9 +++++++++ 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 Apps.XTM/Models/Request/Projects/ListProjectsRequest.cs create mode 100644 Apps.XTM/Utils/DictionaryHelpers.cs diff --git a/Apps.XTM/Actions/ProjectActions.cs b/Apps.XTM/Actions/ProjectActions.cs index e22fd9b..1360422 100644 --- a/Apps.XTM/Actions/ProjectActions.cs +++ b/Apps.XTM/Actions/ProjectActions.cs @@ -15,6 +15,7 @@ using Apps.XTM.Models.Response.Metrics; using System; using Apps.XTM.Models.Response.User; +using Apps.XTM.Utils; namespace Apps.XTM.Actions; @@ -25,7 +26,7 @@ public class ProjectActions(InvocationContext invocationContext, IFileManagement private const int PageSize = 100; [Action("List projects", Description = "List all projects")] - public async Task ListProjects() + public async Task ListProjects([ActionParameter] ListProjectsRequest request) { var page = 1; var hasMorePages = true; @@ -38,10 +39,16 @@ public async Task ListProjects() { "page", page.ToString() }, { "pageSize", PageSize.ToString() } }; - - var response = await Client.ExecuteXtmWithJson?>(ApiEndpoints.Projects, + + if (request.Name != null) + { + queryParams.Add("name", request.Name); + } + + var endpoint = $"{ApiEndpoints.Projects}?{queryParams.ToQueryString()}"; + var response = await Client.ExecuteXtmWithJson?>(endpoint, Method.Get, - queryParams, + null, Creds); if (response != null && response.Any()) diff --git a/Apps.XTM/DataSourceHandlers/ProjectDataHandler.cs b/Apps.XTM/DataSourceHandlers/ProjectDataHandler.cs index 5c9ad19..d6d64b1 100644 --- a/Apps.XTM/DataSourceHandlers/ProjectDataHandler.cs +++ b/Apps.XTM/DataSourceHandlers/ProjectDataHandler.cs @@ -1,5 +1,6 @@ using Apps.XTM.Actions; using Apps.XTM.Invocables; +using Apps.XTM.Models.Request.Projects; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; @@ -11,7 +12,7 @@ public class ProjectDataHandler(InvocationContext invocationContext) public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { var actions = new ProjectActions(InvocationContext, null!); - var response = await actions.ListProjects(); + var response = await actions.ListProjects(new ListProjectsRequest()); return response.Projects .Where(x => context.SearchString == null || x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) diff --git a/Apps.XTM/Models/Request/Projects/ListProjectsRequest.cs b/Apps.XTM/Models/Request/Projects/ListProjectsRequest.cs new file mode 100644 index 0000000..071accd --- /dev/null +++ b/Apps.XTM/Models/Request/Projects/ListProjectsRequest.cs @@ -0,0 +1,9 @@ +using Blackbird.Applications.Sdk.Common; + +namespace Apps.XTM.Models.Request.Projects; + +public class ListProjectsRequest +{ + [Display("Project name")] + public string? Name { get; set; } +} \ No newline at end of file diff --git a/Apps.XTM/Utils/DictionaryHelpers.cs b/Apps.XTM/Utils/DictionaryHelpers.cs new file mode 100644 index 0000000..722301d --- /dev/null +++ b/Apps.XTM/Utils/DictionaryHelpers.cs @@ -0,0 +1,9 @@ +namespace Apps.XTM.Utils; + +public static class DictionaryHelpers +{ + public static string ToQueryString(this Dictionary dictionary) + { + return string.Join("&", dictionary.Select(kvp => $"{kvp.Key}={kvp.Value}")); + } +} \ No newline at end of file