From 31211031a2c6cc8f549d47d8f35dc36d1ce0c617 Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 17:55:13 +0200 Subject: [PATCH 01/11] Addind space and team ids to authentication connection inputs --- ClickUp/Actions/AttachmentActions.cs | 3 +- ClickUp/Actions/FolderActions.cs | 13 ++-- ClickUp/Actions/GoalActions.cs | 13 ++-- ClickUp/Actions/ListActions.cs | 13 ++-- ClickUp/Actions/SpaceActions.cs | 34 ++++---- ClickUp/Actions/TagActions.cs | 13 ++-- ClickUp/Actions/TaskActions.cs | 2 +- ClickUp/Actions/UserGroupActions.cs | 7 +- ClickUp/Apps.ClickUp.csproj | 2 +- ClickUp/Connections/ConnectionDefinition.cs | 14 +--- ClickUp/Constants/CredsNames.cs | 2 + .../Folder/FolderCustomFieldDataHandler.cs | 2 +- .../Folder/FolderDataHandler.cs | 5 +- .../Folder/FolderListDataHandler.cs | 22 +++--- .../Folder/FolderTaskDataHandler.cs | 6 +- .../Folder/PrimaryFolderDataHandler.cs | 2 +- ClickUp/DataSourceHandlers/GoalDataHandler.cs | 13 ++-- .../Space/SpaceCustomFieldDataHandler.cs | 22 +++--- .../Space/SpaceFolderDataHandler.cs | 22 +++--- .../Space/SpaceListDataHandler.cs | 22 +++--- .../Space/SpaceTaskDataHandler.cs | 4 +- .../Request/CustomField/CustomFieldRequest.cs | 10 +-- .../Models/Request/Folder/FolderRequest.cs | 10 +-- ClickUp/Models/Request/Goal/GoalRequest.cs | 4 - .../Models/Request/Group/ListGroupsQuery.cs | 7 +- ClickUp/Models/Request/List/ListRequest.cs | 16 +--- ClickUp/Models/Request/Task/TaskRequest.cs | 18 +---- .../Webhooks/Handlers/BaseWebhookHandler.cs | 21 ++--- .../Handlers/Folder/FolderCreatedHandler.cs | 3 +- .../Handlers/Folder/FolderDeletedHandler.cs | 3 +- .../Handlers/Folder/FolderUpdatedHandler.cs | 3 +- .../Handlers/Goal/GoalCreatedHandler.cs | 3 +- .../Handlers/Goal/GoalDeletedHandler.cs | 3 +- .../Handlers/Goal/GoalUpdatedHandler.cs | 4 +- .../KeyResult/KeyResultCreatedHandler.cs | 3 +- .../KeyResult/KeyResultDeletedHandler.cs | 3 +- .../KeyResult/KeyResultUpdatedHandler.cs | 3 +- .../Handlers/List/ListCreatedHandler.cs | 3 +- .../Handlers/List/ListDeletedHandler.cs | 3 +- .../Handlers/List/ListUpdatedHandler.cs | 4 +- .../Handlers/Space/SpaceCreatedHandler.cs | 4 +- .../Handlers/Space/SpaceDeletedHandler.cs | 4 +- .../Handlers/Space/SpaceUpdatedHandler.cs | 3 +- .../DataHandlers/FolderWebhookDataHandler.cs | 26 +++---- .../DataHandlers/SpaceWebhookDataHandler.cs | 26 +++---- .../DataHandlers/TaskWebhookDataHandler.cs | 4 +- .../Tasks/TaskAssigneeUpdatedHandler.cs | 4 +- .../Tasks/TaskCommentPostedHandler.cs | 3 +- .../Tasks/TaskCommentUpdatedHandler.cs | 4 +- .../Handlers/Tasks/TaskCreatedHandler.cs | 3 +- .../Handlers/Tasks/TaskDeletedHandler.cs | 3 +- .../Tasks/TaskDueDateUpdatedHandler.cs | 3 +- .../Handlers/Tasks/TaskMovedHandler.cs | 3 +- .../Tasks/TaskPriorityUpdatedHandler.cs | 3 +- .../Tasks/TaskStatusUpdatedHandler.cs | 3 +- .../Handlers/Tasks/TaskTagUpdatedHandler.cs | 3 +- .../Tasks/TaskTimeEstimateUpdatedHandler.cs | 3 +- .../Tasks/TaskTimeTrackedUpdatedHandler.cs | 4 +- .../Handlers/Tasks/TaskUpdatedHandler.cs | 3 +- .../Webhooks/Handlers/WebhookScopeRequest.cs | 11 +-- Tests.ClickUp/DataHandlerTests.cs | 77 ++++++++++++++++++- 61 files changed, 286 insertions(+), 271 deletions(-) diff --git a/ClickUp/Actions/AttachmentActions.cs b/ClickUp/Actions/AttachmentActions.cs index edb8516..52e1521 100644 --- a/ClickUp/Actions/AttachmentActions.cs +++ b/ClickUp/Actions/AttachmentActions.cs @@ -12,6 +12,7 @@ using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; using Method = RestSharp.Method; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; namespace Apps.ClickUp.Actions; @@ -37,7 +38,7 @@ public async Task CreateAttachment( var endpoint = $"{ApiEndpoints.Tasks}/{task.TaskId}{ApiEndpoints.Attachments}".WithQuery(query); if (query.CustomTaskIds is true) - endpoint = endpoint.SetQueryParameter("team_id", task.TeamId); + endpoint = endpoint.SetQueryParameter("team_id", InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value); var request = new ClickUpRequest(endpoint, Method.Post, Creds) .AddFile("attachment", () => file, input.FileName ?? input.File.Name); diff --git a/ClickUp/Actions/FolderActions.cs b/ClickUp/Actions/FolderActions.cs index dc7bc99..e0ad5b5 100644 --- a/ClickUp/Actions/FolderActions.cs +++ b/ClickUp/Actions/FolderActions.cs @@ -10,6 +10,7 @@ using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; @@ -23,22 +24,18 @@ public FolderActions(InvocationContext invocationContext) : base(invocationConte } [Action("Search folders", Description = "Get all folders given a specific space")] - public Task GetFolders( - [ActionParameter] SpaceRequest space, - [ActionParameter] ListQuery query) + public Task GetFolders([ActionParameter] ListQuery query) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Folders}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Folders}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); } [Action("Create folder", Description = "Create a new folder")] - public Task CreateFolder( - [ActionParameter] SpaceRequest space, - [ActionParameter] CreateFolderRequest input) + public Task CreateFolder([ActionParameter] CreateFolderRequest input) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Folders}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Folders}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); diff --git a/ClickUp/Actions/GoalActions.cs b/ClickUp/Actions/GoalActions.cs index 235b802..b3d7dc7 100644 --- a/ClickUp/Actions/GoalActions.cs +++ b/ClickUp/Actions/GoalActions.cs @@ -9,6 +9,7 @@ using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; @@ -22,22 +23,18 @@ public GoalActions(InvocationContext invocationContext) : base(invocationContext } [Action("Search goals", Description = "Get all goals")] - public Task GetGoals( - [ActionParameter] TeamRequest team, - [ActionParameter] ListGoalsQuery query) + public Task GetGoals([ActionParameter] ListGoalsQuery query) { - var endpoint = $"{ApiEndpoints.Teams}/{team.TeamId}{ApiEndpoints.Goals}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team)}{ApiEndpoints.Goals}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); } [Action("Create goal", Description = "Create a new goal")] - public async Task CreateGoal( - [ActionParameter] TeamRequest team, - [ActionParameter] CreateGoalRequest input) + public async Task CreateGoal([ActionParameter] CreateGoalRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{team.TeamId}{ApiEndpoints.Goals}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team)}{ApiEndpoints.Goals}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); diff --git a/ClickUp/Actions/ListActions.cs b/ClickUp/Actions/ListActions.cs index 46e78ed..574ab30 100644 --- a/ClickUp/Actions/ListActions.cs +++ b/ClickUp/Actions/ListActions.cs @@ -11,6 +11,7 @@ using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; @@ -24,11 +25,9 @@ public ListActions(InvocationContext invocationContext) : base(invocationContext } [Action("Get lists from space", Description = "Get all lists given a specific space")] - public Task GetListsFromSpace( - [ActionParameter] SpaceRequest space, - [ActionParameter] ListQuery query) + public Task GetListsFromSpace([ActionParameter] ListQuery query) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Lists}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Lists}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); @@ -58,11 +57,9 @@ public Task CreateFolderList( } [Action("Create space list", Description = "Create a new space list")] - public Task CreateSpaceList( - [ActionParameter] SpaceRequest space, - [ActionParameter] CreateListRequest body) + public Task CreateSpaceList([ActionParameter] CreateListRequest body) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Lists}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Lists}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(body, JsonConfig.Settings); diff --git a/ClickUp/Actions/SpaceActions.cs b/ClickUp/Actions/SpaceActions.cs index 9f3208f..c1f67c3 100644 --- a/ClickUp/Actions/SpaceActions.cs +++ b/ClickUp/Actions/SpaceActions.cs @@ -4,12 +4,12 @@ using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request; using Apps.ClickUp.Models.Request.Space; -using Apps.ClickUp.Models.Request.Team; using Apps.ClickUp.Models.Response.Space; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; @@ -23,40 +23,34 @@ public SpaceActions(InvocationContext invocationContext) : base(invocationContex } [Action("Search spaces", Description = "Get all spaces given a specific team")] - public Task GetSpaces( - [ActionParameter] TeamRequest team, - [ActionParameter] ListQuery query) + public Task GetSpaces([ActionParameter] ListQuery query) { - var endpoint = $"{ApiEndpoints.Teams}/{team.TeamId}{ApiEndpoints.Spaces}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Spaces}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); } - + [Action("Create space", Description = "Create a new space")] - public Task CreateSpace( - [ActionParameter] TeamRequest team, - [ActionParameter] CreateSpaceRequest input) + public Task CreateSpace([ActionParameter] CreateSpaceRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{team.TeamId}{ApiEndpoints.Spaces}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Spaces}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); return Client.ExecuteWithErrorHandling(request); - } - + } + [Action("Update space", Description = "Update specific space")] - public Task UpdateSpace( - [ActionParameter] SpaceRequest space, - [ActionParameter] UpdateSpaceRequest input) + public Task UpdateSpace([ActionParameter] UpdateSpaceRequest input) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}"; var request = new ClickUpRequest(endpoint, Method.Put, Creds) .WithJsonBody(input, JsonConfig.Settings); - + return Client.ExecuteWithErrorHandling(request); - } - + } + [Action("Get space", Description = "Get details of a specific space")] public Task GetSpace( [ActionParameter] SpaceRequest space) @@ -66,7 +60,7 @@ public Task GetSpace( return Client.ExecuteWithErrorHandling(request); } - + [Action("Delete space", Description = "Delete specific space")] public Task DeleteSpace( [ActionParameter] SpaceRequest space) diff --git a/ClickUp/Actions/TagActions.cs b/ClickUp/Actions/TagActions.cs index 4da95cb..adc6090 100644 --- a/ClickUp/Actions/TagActions.cs +++ b/ClickUp/Actions/TagActions.cs @@ -9,6 +9,7 @@ using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.Actions; @@ -21,25 +22,23 @@ public TagActions(InvocationContext invocationContext) : base(invocationContext) } [Action("Search tags", Description = "Get all space tags")] - public Task GetTags([ActionParameter] SpaceRequest space) + public Task GetTags() { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Tags}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Tags}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); } [Action("Create tag", Description = "Create a new space tag")] - public async Task CreateTag( - [ActionParameter] SpaceRequest space, - [ActionParameter] CreateTagInput input) + public async Task CreateTag([ActionParameter] CreateTagInput input) { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}{ApiEndpoints.Tags}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Tags}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(new CreateTagRequest(input), JsonConfig.Settings); await Client.ExecuteWithErrorHandling(request); - var allTags = await GetTags(space); + var allTags = await GetTags(); return allTags.Tags.First(x => x.Name == input.Name); } diff --git a/ClickUp/Actions/TaskActions.cs b/ClickUp/Actions/TaskActions.cs index d68323d..e32cfb8 100644 --- a/ClickUp/Actions/TaskActions.cs +++ b/ClickUp/Actions/TaskActions.cs @@ -27,7 +27,7 @@ public TaskActions(InvocationContext invocationContext) : base(invocationContext } [Action("Search tasks", Description = "Get all tasks given a specific list")] - public Task GetTasksFromList([ActionParameter] ListRequest list) + public Task GetTasksFromList([ActionParameter] ListRequest? list) { var endpoint = $"{ApiEndpoints.Lists}/{list.ListId}{ApiEndpoints.Tasks}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); diff --git a/ClickUp/Actions/UserGroupActions.cs b/ClickUp/Actions/UserGroupActions.cs index 8759985..7e9465d 100644 --- a/ClickUp/Actions/UserGroupActions.cs +++ b/ClickUp/Actions/UserGroupActions.cs @@ -9,6 +9,7 @@ using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; @@ -31,11 +32,9 @@ public Task GetGroups([ActionParameter] ListGroupsQuery quer } [Action("Create user group", Description = "Create a new user group")] - public Task CreateGroup( - [ActionParameter] TeamRequest team, - [ActionParameter] CreateGroupRequest input) + public Task CreateGroup([ActionParameter] CreateGroupRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{team.TeamId}{ApiEndpoints.Groups}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Groups}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); diff --git a/ClickUp/Apps.ClickUp.csproj b/ClickUp/Apps.ClickUp.csproj index 8deee14..541c7b0 100644 --- a/ClickUp/Apps.ClickUp.csproj +++ b/ClickUp/Apps.ClickUp.csproj @@ -5,7 +5,7 @@ enable ClickUp Customizable workplace productivity platform - 1.0.8 + 1.0.9 Apps.ClickUp diff --git a/ClickUp/Connections/ConnectionDefinition.cs b/ClickUp/Connections/ConnectionDefinition.cs index 90ca4f9..be2b3ee 100644 --- a/ClickUp/Connections/ConnectionDefinition.cs +++ b/ClickUp/Connections/ConnectionDefinition.cs @@ -15,19 +15,13 @@ public class ConnectionDefinition : IConnectionDefinition ConnectionUsage = ConnectionUsage.Actions, ConnectionProperties = new List() { - new(CredsNames.Token) { DisplayName = "Token", Sensitive=true } + new(CredsNames.Token) { DisplayName = "Token", Sensitive=true }, + new(CredsNames.Team) { DisplayName = "Team ID", Sensitive=false }, + new(CredsNames.Space) { DisplayName = "Space ID", Sensitive=false } } } }; public IEnumerable CreateAuthorizationCredentialsProviders( - Dictionary values) - { - var token = values.First(v => v.Key == CredsNames.Token); - yield return new AuthenticationCredentialsProvider( - AuthenticationCredentialsRequestLocation.Header, - token.Key, - token.Value - ); - } + Dictionary values) => values.Select(x => new AuthenticationCredentialsProvider(x.Key, x.Value)).ToList(); } \ No newline at end of file diff --git a/ClickUp/Constants/CredsNames.cs b/ClickUp/Constants/CredsNames.cs index 7a88446..2e981bd 100644 --- a/ClickUp/Constants/CredsNames.cs +++ b/ClickUp/Constants/CredsNames.cs @@ -3,4 +3,6 @@ public static class CredsNames { public const string Token = "token"; + public const string Team = "team"; + public const string Space = "space"; } \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs index 572615d..861c49a 100644 --- a/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs @@ -7,7 +7,7 @@ namespace Apps.ClickUp.DataSourceHandlers.Folder; public class FolderCustomFieldDataHandler : FolderDataHandler { public FolderCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : - base(invocationContext, request.SpaceId) + base(invocationContext) { } } \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs index a8256d3..b32714d 100644 --- a/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs @@ -4,6 +4,7 @@ using Apps.ClickUp.Models.Response.Folder; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers.Folder; @@ -12,9 +13,9 @@ public class FolderDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { private readonly string _spaceId; - public FolderDataHandler(InvocationContext invocationContext, string spaceId) : base(invocationContext) + public FolderDataHandler(InvocationContext invocationContext) : base(invocationContext) { - _spaceId = spaceId; + _spaceId = invocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value; } public async Task> GetDataAsync(DataSourceContext context, diff --git a/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs index 894014e..81c220e 100644 --- a/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs @@ -1,13 +1,13 @@ -using Apps.ClickUp.Models.Request.List; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; +//using Apps.ClickUp.Models.Request.List; +//using Blackbird.Applications.Sdk.Common; +//using Blackbird.Applications.Sdk.Common.Invocation; -namespace Apps.ClickUp.DataSourceHandlers.Folder; +//namespace Apps.ClickUp.DataSourceHandlers.Folder; -public class FolderListDataHandler : FolderDataHandler -{ - public FolderListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : - base(invocationContext, request.SpaceId) - { - } -} \ No newline at end of file +//public class FolderListDataHandler : FolderDataHandler +//{ +// public FolderListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : +// base(invocationContext, request.SpaceId) +// { +// } +//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs index 9f62583..f87e1eb 100644 --- a/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs @@ -1,13 +1,15 @@ +using Apps.ClickUp.Constants; using Apps.ClickUp.Models.Request.Task; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; namespace Apps.ClickUp.DataSourceHandlers.Folder; public class FolderTaskDataHandler : FolderDataHandler { - public FolderTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) : - base(invocationContext, request.SpaceId) + public FolderTaskDataHandler(InvocationContext invocationContext) : + base(invocationContext) { } } \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs index a626342..c7c2137 100644 --- a/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs @@ -7,7 +7,7 @@ namespace Apps.ClickUp.DataSourceHandlers.Folder; public class PrimaryFolderDataHandler : FolderDataHandler { public PrimaryFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : - base(invocationContext, request.SpaceId) + base(invocationContext) { } } \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/GoalDataHandler.cs b/ClickUp/DataSourceHandlers/GoalDataHandler.cs index 429ce08..737141c 100644 --- a/ClickUp/DataSourceHandlers/GoalDataHandler.cs +++ b/ClickUp/DataSourceHandlers/GoalDataHandler.cs @@ -1,32 +1,31 @@ using Apps.ClickUp.Api; using Apps.ClickUp.Constants; using Apps.ClickUp.Invocables; -using Apps.ClickUp.Models.Request.Goal; using Apps.ClickUp.Models.Response.Goal; -using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers; public class GoalDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { - private readonly GoalRequest _request; + private readonly string _teamId; - public GoalDataHandler(InvocationContext invocationContext, [ActionParameter] GoalRequest request) : base( + public GoalDataHandler(InvocationContext invocationContext) : base( invocationContext) { - _request = request; + _teamId = InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value; } public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_request.TeamId)) + if (string.IsNullOrEmpty(_teamId)) throw new("You should specify Team ID first"); - var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{_request.TeamId}/goal", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{_teamId}/goal", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Goals diff --git a/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs index f1811f5..f7baf6b 100644 --- a/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs @@ -1,13 +1,13 @@ -using Apps.ClickUp.Models.Request.CustomField; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; +//using Apps.ClickUp.Models.Request.CustomField; +//using Blackbird.Applications.Sdk.Common; +//using Blackbird.Applications.Sdk.Common.Invocation; -namespace Apps.ClickUp.DataSourceHandlers.Space; +//namespace Apps.ClickUp.DataSourceHandlers.Space; -public class SpaceCustomFieldDataHandler : SpaceDataHandler -{ - public SpaceCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : - base(invocationContext, request.TeamId) - { - } -} \ No newline at end of file +//public class SpaceCustomFieldDataHandler : SpaceDataHandler +//{ +// public SpaceCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : +// base(invocationContext, request.TeamId) +// { +// } +//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs index 0e97a72..c243b4a 100644 --- a/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs @@ -1,13 +1,13 @@ -using Apps.ClickUp.Models.Request.Folder; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; +//using Apps.ClickUp.Models.Request.Folder; +//using Blackbird.Applications.Sdk.Common; +//using Blackbird.Applications.Sdk.Common.Invocation; -namespace Apps.ClickUp.DataSourceHandlers.Space; +//namespace Apps.ClickUp.DataSourceHandlers.Space; -public class SpaceFolderDataHandler : SpaceDataHandler -{ - public SpaceFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : - base(invocationContext, request.TeamId) - { - } -} \ No newline at end of file +//public class SpaceFolderDataHandler : SpaceDataHandler +//{ +// public SpaceFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : +// base(invocationContext, request.TeamId) +// { +// } +//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs index 9808f1f..979f0f1 100644 --- a/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs @@ -1,13 +1,13 @@ -using Apps.ClickUp.Models.Request.List; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; +//using Apps.ClickUp.Models.Request.List; +//using Blackbird.Applications.Sdk.Common; +//using Blackbird.Applications.Sdk.Common.Invocation; -namespace Apps.ClickUp.DataSourceHandlers.Space; +//namespace Apps.ClickUp.DataSourceHandlers.Space; -public class SpaceListDataHandler : SpaceDataHandler -{ - public SpaceListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : - base(invocationContext, request.TeamId) - { - } -} \ No newline at end of file +//public class SpaceListDataHandler : SpaceDataHandler +//{ +// public SpaceListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : +// base(invocationContext, request.TeamId) +// { +// } +//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs index c6d4ce8..6148226 100644 --- a/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs +++ b/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs @@ -1,13 +1,15 @@ +using Apps.ClickUp.Constants; using Apps.ClickUp.Models.Request.Task; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; namespace Apps.ClickUp.DataSourceHandlers.Space; public class SpaceTaskDataHandler : SpaceDataHandler { public SpaceTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) : - base(invocationContext, request.TeamId) + base(invocationContext, invocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value) { } } \ No newline at end of file diff --git a/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs b/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs index bf51222..61d92a3 100644 --- a/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs +++ b/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs @@ -10,16 +10,8 @@ namespace Apps.ClickUp.Models.Request.CustomField; public class CustomFieldRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - - [Display("Space ID")] - [DataSource(typeof(SpaceCustomFieldDataHandler))] - public string SpaceId { get; set; } - [Display("Folder ID")] - [DataSource(typeof(FolderCustomFieldDataHandler))] + [DataSource(typeof(FolderDataHandler))] public string FolderId { get; set; } [Display("List ID")] diff --git a/ClickUp/Models/Request/Folder/FolderRequest.cs b/ClickUp/Models/Request/Folder/FolderRequest.cs index 18e5363..59c7151 100644 --- a/ClickUp/Models/Request/Folder/FolderRequest.cs +++ b/ClickUp/Models/Request/Folder/FolderRequest.cs @@ -8,15 +8,7 @@ namespace Apps.ClickUp.Models.Request.Folder; public class FolderRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - - [Display("Space ID")] - [DataSource(typeof(SpaceFolderDataHandler))] - public string SpaceId { get; set; } - [Display("Folder ID")] - [DataSource(typeof(PrimaryFolderDataHandler))] + [DataSource(typeof(FolderDataHandler))] public string FolderId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Goal/GoalRequest.cs b/ClickUp/Models/Request/Goal/GoalRequest.cs index f93cdaa..7cbec90 100644 --- a/ClickUp/Models/Request/Goal/GoalRequest.cs +++ b/ClickUp/Models/Request/Goal/GoalRequest.cs @@ -6,10 +6,6 @@ namespace Apps.ClickUp.Models.Request.Goal; public class GoalRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - [Display("Goal ID")] [DataSource(typeof(GoalDataHandler))] public string GoalId { get; set; } diff --git a/ClickUp/Models/Request/Group/ListGroupsQuery.cs b/ClickUp/Models/Request/Group/ListGroupsQuery.cs index 4f468e1..1e30c38 100644 --- a/ClickUp/Models/Request/Group/ListGroupsQuery.cs +++ b/ClickUp/Models/Request/Group/ListGroupsQuery.cs @@ -7,12 +7,7 @@ namespace Apps.ClickUp.Models.Request.Group; public class ListGroupsQuery { - [JsonProperty("team_id")] - [Display("Team ID")] - [DataSource(typeof(TeamDataHandler))] - public string? TeamId { get; set; } - - [JsonProperty("group_ids")] + [JsonProperty("group_ids")] [Display("Group IDs")] public string? GroupIds { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/List/ListRequest.cs b/ClickUp/Models/Request/List/ListRequest.cs index ec98698..5f67dc4 100644 --- a/ClickUp/Models/Request/List/ListRequest.cs +++ b/ClickUp/Models/Request/List/ListRequest.cs @@ -1,7 +1,5 @@ -using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.Folder; using Apps.ClickUp.DataSourceHandlers.List; -using Apps.ClickUp.DataSourceHandlers.Space; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; @@ -9,18 +7,10 @@ namespace Apps.ClickUp.Models.Request.List; public class ListRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - - [Display("Space ID")] - [DataSource(typeof(SpaceListDataHandler))] - public string SpaceId { get; set; } - [Display("Folder ID")] - [DataSource(typeof(FolderListDataHandler))] + [DataSource(typeof(FolderDataHandler))] public string FolderId { get; set; } - + [Display("List ID")] [DataSource(typeof(PrimaryListDataHandler))] public string ListId { get; set; } diff --git a/ClickUp/Models/Request/Task/TaskRequest.cs b/ClickUp/Models/Request/Task/TaskRequest.cs index a9368a5..659c913 100644 --- a/ClickUp/Models/Request/Task/TaskRequest.cs +++ b/ClickUp/Models/Request/Task/TaskRequest.cs @@ -1,7 +1,5 @@ -using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.Folder; using Apps.ClickUp.DataSourceHandlers.List; -using Apps.ClickUp.DataSourceHandlers.Space; using Apps.ClickUp.DataSourceHandlers.Task; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; @@ -10,22 +8,14 @@ namespace Apps.ClickUp.Models.Request.Task; public class TaskRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - - [Display("Space ID")] - [DataSource(typeof(SpaceTaskDataHandler))] - public string SpaceId { get; set; } - [Display("Folder ID")] - [DataSource(typeof(FolderTaskDataHandler))] + [DataSource(typeof(FolderDataHandler))] public string FolderId { get; set; } - + [Display("List ID")] [DataSource(typeof(ListTaskDataHandler))] public string ListId { get; set; } - + [Display("Task ID")] [DataSource(typeof(PrimaryTaskDataHandler))] public string TaskId { get; set; } diff --git a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs index dfc3ae1..54258a7 100644 --- a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs +++ b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs @@ -1,29 +1,24 @@ using Apps.ClickUp.Api; using Apps.ClickUp.Constants; +using Apps.ClickUp.Invocables; using Apps.ClickUp.Webhooks.Models.Payloads.Additional; using Apps.ClickUp.Webhooks.Models.Request; using Blackbird.Applications.Sdk.Common.Authentication; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; using Blackbird.Applications.Sdk.Utils.Extensions.Http; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.Webhooks.Handlers; -public abstract class BaseWebhookHandler : IWebhookEventHandler +public abstract class BaseWebhookHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest input) : ClickUpInvocable(invocationContext), IWebhookEventHandler { protected abstract string EventType { get; } - private string TeamId { get; } protected WebhookScopeRequest Scope { get; } private ClickUpClient Client { get; } - public BaseWebhookHandler([WebhookParameter] WebhookScopeRequest input) - { - TeamId = input.TeamId; - Scope = input; - Client = new(); - } - public Task SubscribeAsync(IEnumerable creds, Dictionary values) { var payload = new AddWebhookRequest() @@ -34,7 +29,7 @@ public Task SubscribeAsync(IEnumerable creds, ApplyScope(payload, Scope); - var endpoint = $"{ApiEndpoints.Teams}/{TeamId}{ApiEndpoints.Webhooks}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Webhooks}"; var request = new ClickUpRequest(endpoint, Method.Post, creds) .WithJsonBody(payload, JsonConfig.Settings); @@ -58,13 +53,13 @@ public async Task UnsubscribeAsync(IEnumerable GetAllWebhooks(IEnumerable creds) { - var endpoint = $"{ApiEndpoints.Teams}/{TeamId}{ApiEndpoints.Webhooks}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Webhooks}"; var request = new ClickUpRequest(endpoint, Method.Get, creds); return Client.ExecuteWithErrorHandling(request); } - private static void ApplyScope(AddWebhookRequest payload, WebhookScopeRequest scope) + private void ApplyScope(AddWebhookRequest payload, WebhookScopeRequest scope) { var taskId = Normalize(scope.TaskId); if (!string.IsNullOrWhiteSpace(taskId)) @@ -87,7 +82,7 @@ private static void ApplyScope(AddWebhookRequest payload, WebhookScopeRequest sc return; } - var spaceId = TryParseLong(scope.SpaceId); + var spaceId = TryParseLong(InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value); if (spaceId.HasValue) { payload.SpaceId = spaceId.Value; diff --git a/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs index 9896353..ed328ab 100644 --- a/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Folder; @@ -7,7 +8,7 @@ public class FolderCreatedHandler : BaseWebhookHandler { protected override string EventType => "folderCreated"; - public FolderCreatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public FolderCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs index 810f84d..ff90191 100644 --- a/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Folder; @@ -7,7 +8,7 @@ public class FolderDeletedHandler : BaseWebhookHandler { protected override string EventType => "folderDeleted"; - public FolderDeletedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public FolderDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs index 378c336..946c5c8 100644 --- a/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Folder; @@ -7,7 +8,7 @@ public class FolderUpdatedHandler : BaseWebhookHandler { protected override string EventType => "folderUpdated"; - public FolderUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public FolderUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs index 6530bd9..8048911 100644 --- a/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Goal; @@ -7,7 +8,7 @@ public class GoalCreatedHandler : BaseWebhookHandler { protected override string EventType => "goalCreated"; - public GoalCreatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public GoalCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs index 67e1881..1a8c8ed 100644 --- a/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Goal; @@ -7,7 +8,7 @@ public class GoalDeletedHandler : BaseWebhookHandler { protected override string EventType => "goalDeleted"; - public GoalDeletedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public GoalDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Goal/GoalUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Goal/GoalUpdatedHandler.cs index 4b4d03d..55c7fb7 100644 --- a/ClickUp/Webhooks/Handlers/Goal/GoalUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Goal/GoalUpdatedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Goal; @@ -7,7 +7,7 @@ public class GoalUpdatedHandler : BaseWebhookHandler { protected override string EventType => "goalUpdated"; - public GoalUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public GoalUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs index 8ed69e9..4dad059 100644 --- a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.KeyResult; @@ -7,7 +8,7 @@ public class KeyResultCreatedHandler : BaseWebhookHandler { protected override string EventType => "keyResultCreated"; - public KeyResultCreatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public KeyResultCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs index c569e2d..2b3b546 100644 --- a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.KeyResult; @@ -7,7 +8,7 @@ public class KeyResultDeletedHandler : BaseWebhookHandler { protected override string EventType => "keyResultDeleted"; - public KeyResultDeletedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public KeyResultDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs index 69d1da1..6e0d528 100644 --- a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.KeyResult; @@ -7,7 +8,7 @@ public class KeyResultUpdatedHandler : BaseWebhookHandler { protected override string EventType => "keyResultUpdated"; - public KeyResultUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public KeyResultUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs b/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs index 03468a3..deb0446 100644 --- a/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.List; @@ -7,7 +8,7 @@ public class ListCreatedHandler : BaseWebhookHandler { protected override string EventType => "listCreated"; - public ListCreatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public ListCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs b/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs index 5790478..ce95d8a 100644 --- a/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.List; @@ -7,7 +8,7 @@ public class ListDeletedHandler : BaseWebhookHandler { protected override string EventType => "listDeleted"; - public ListDeletedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public ListDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/List/ListUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/List/ListUpdatedHandler.cs index 158183a..814528b 100644 --- a/ClickUp/Webhooks/Handlers/List/ListUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/List/ListUpdatedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.List; @@ -7,7 +7,7 @@ public class ListUpdatedHandler : BaseWebhookHandler { protected override string EventType => "listUpdated"; - public ListUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public ListUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Space/SpaceCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Space/SpaceCreatedHandler.cs index 1d5842e..0eaccc6 100644 --- a/ClickUp/Webhooks/Handlers/Space/SpaceCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Space/SpaceCreatedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Space; @@ -7,7 +7,7 @@ public class SpaceCreatedHandler : BaseWebhookHandler { protected override string EventType => "spaceCreated"; - public SpaceCreatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public SpaceCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Space/SpaceDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Space/SpaceDeletedHandler.cs index d30ac20..dfbe450 100644 --- a/ClickUp/Webhooks/Handlers/Space/SpaceDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Space/SpaceDeletedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Space; @@ -7,7 +7,7 @@ public class SpaceDeletedHandler : BaseWebhookHandler { protected override string EventType => "spaceDeleted"; - public SpaceDeletedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public SpaceDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs index e1fd59b..15a1117 100644 --- a/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Space; @@ -7,7 +8,7 @@ public class SpaceUpdatedHandler : BaseWebhookHandler { protected override string EventType => "spaceUpdated"; - public SpaceUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public SpaceUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs index 4474e09..aeaf040 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs @@ -1,16 +1,14 @@ -using Apps.ClickUp.DataSourceHandlers.Folder; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Common.Webhooks; +//using Apps.ClickUp.DataSourceHandlers.Folder; +//using Blackbird.Applications.Sdk.Common.Invocation; -namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers -{ - public class FolderWebhookDataHandler : FolderDataHandler - { - public FolderWebhookDataHandler(InvocationContext invocationContext, [ActionParameter] WebhookScopeRequest request) : - base(invocationContext, request.SpaceId) - { +//namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers +//{ +// public class FolderWebhookDataHandler : FolderDataHandler +// { +// public FolderWebhookDataHandler(InvocationContext invocationContext, WebhookScopeRequest request) : +// base(invocationContext, request.SpaceId) +// { - } - } -} +// } +// } +//} diff --git a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs index bc7485e..c3b72c0 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs @@ -1,16 +1,14 @@ -using Apps.ClickUp.DataSourceHandlers.Space; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Common.Webhooks; +//using Apps.ClickUp.DataSourceHandlers.Space; +//using Blackbird.Applications.Sdk.Common.Invocation; -namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers -{ - public class SpaceWebhookDataHandler : SpaceDataHandler - { - public SpaceWebhookDataHandler(InvocationContext invocationContext, [ActionParameter] WebhookScopeRequest request) : - base(invocationContext, request.TeamId) - { +//namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers +//{ +// public class SpaceWebhookDataHandler : SpaceDataHandler +// { +// public SpaceWebhookDataHandler(InvocationContext invocationContext, WebhookScopeRequest request) : +// base(invocationContext, request.TeamId) +// { - } - } -} +// } +// } +//} diff --git a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs index cfe7bdc..fe86130 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs @@ -1,13 +1,11 @@ using Apps.ClickUp.DataSourceHandlers.Task; -using Apps.ClickUp.Models.Request.Task; -using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Invocation; namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers { public class TaskWebhookDataHandler : TaskDataHandler { - public TaskWebhookDataHandler(InvocationContext invocationContext, [ActionParameter] WebhookScopeRequest request) : + public TaskWebhookDataHandler(InvocationContext invocationContext, WebhookScopeRequest request) : base(invocationContext, request.ListId) { diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskAssigneeUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskAssigneeUpdatedHandler.cs index f620352..9c00489 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskAssigneeUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskAssigneeUpdatedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +7,7 @@ public class TaskAssigneeUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskAssigneeUpdated"; - public TaskAssigneeUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskAssigneeUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs index 8fbb4a1..1ec3b40 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskCommentPostedHandler : BaseWebhookHandler { protected override string EventType => "taskCommentPosted"; - public TaskCommentPostedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskCommentPostedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskCommentUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskCommentUpdatedHandler.cs index 3074c00..ea754b3 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskCommentUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskCommentUpdatedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +7,7 @@ public class TaskCommentUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskCommentUpdated"; - public TaskCommentUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskCommentUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs index 273749f..e2c3264 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskCreatedHandler : BaseWebhookHandler { protected override string EventType => "taskCreated"; - public TaskCreatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs index 501965b..3a77a6d 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskDeletedHandler : BaseWebhookHandler { protected override string EventType => "taskDeleted"; - public TaskDeletedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs index 9cd912e..27ab838 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskDueDateUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskDueDateUpdated"; - public TaskDueDateUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskDueDateUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs index 804d9d1..12c8410 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskMovedHandler : BaseWebhookHandler { protected override string EventType => "taskMoved"; - public TaskMovedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskMovedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs index 6f26b73..8ae0668 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskPriorityUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskPriorityUpdated"; - public TaskPriorityUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskPriorityUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs index d7c362f..d84bc3c 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskStatusUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskStatusUpdated"; - public TaskStatusUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskStatusUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs index 58c1f47..f803dd1 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskTagUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskTagUpdated"; - public TaskTagUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskTagUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs index 186aa3a..cdbcde2 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskTimeEstimateUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskTimeEstimateUpdated"; - public TaskTimeEstimateUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskTimeEstimateUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskTimeTrackedUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskTimeTrackedUpdatedHandler.cs index a1818a0..6d31513 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskTimeTrackedUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskTimeTrackedUpdatedHandler.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +7,7 @@ public class TaskTimeTrackedUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskTimeTrackedUpdated"; - public TaskTimeTrackedUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskTimeTrackedUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs index 3261f64..3f2123a 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.Models.Request.Team; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -7,7 +8,7 @@ public class TaskUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskUpdated"; - public TaskUpdatedHandler([WebhookParameter] WebhookScopeRequest team) : base(team) + public TaskUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs b/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs index f2d058e..830eb9f 100644 --- a/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs +++ b/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs @@ -1,4 +1,5 @@ using Apps.ClickUp.DataSourceHandlers; +using Apps.ClickUp.DataSourceHandlers.Folder; using Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; @@ -7,16 +8,8 @@ namespace Apps.ClickUp.Webhooks.Handlers { public class WebhookScopeRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - - [Display("Space ID")] - [DataSource(typeof(SpaceWebhookDataHandler))] - public string? SpaceId { get; set; } - [Display("Folder ID")] - [DataSource(typeof(FolderWebhookDataHandler))] + [DataSource(typeof(FolderDataHandler))] public string? FolderId { get; set; } [Display("List ID")] diff --git a/Tests.ClickUp/DataHandlerTests.cs b/Tests.ClickUp/DataHandlerTests.cs index bae2333..c168091 100644 --- a/Tests.ClickUp/DataHandlerTests.cs +++ b/Tests.ClickUp/DataHandlerTests.cs @@ -1,4 +1,7 @@ -using Tests.ClickUp.Base; +using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers.List; +using Apps.ClickUp.Models.Request.List; +using Tests.ClickUp.Base; namespace Tests.ClickUp; @@ -6,8 +9,78 @@ namespace Tests.ClickUp; public class DataHandlerTests : TestBase { [TestMethod] - public async Task _works() + public async Task FolderDataHandler_works() { + var handler = new FolderDataHandler(InvocationContext); + var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + + foreach (var item in result) + { + Console.WriteLine($"Folder name {item.Key} - {item.Value}"); + } + + Assert.IsNotNull(result); + } + + [TestMethod] + public async Task ListCustomFieldDataHandler_works() + { + var handler = new ListCustomFieldDataHandler(InvocationContext, new Apps.ClickUp.Models.Request.CustomField.CustomFieldRequest { FolderId= "901513903877" }); + + var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + + foreach (var item in result) + { + Console.WriteLine($"Folder name {item.Key} - {item.Value}"); + } + + Assert.IsNotNull(result); + } + + [TestMethod] + public async Task ListDataHandler_works() + { + var handler = new ListDataHandler(InvocationContext, "901513903877"); + + var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + + foreach (var item in result) + { + Console.WriteLine($"Folder name {item.Key} - {item.Value}"); + } + + Assert.IsNotNull(result); } + + [TestMethod] + public async Task ListTaskDataHandler_works() + { + var handler = new ListTaskDataHandler(InvocationContext, new Apps.ClickUp.Models.Request.Task.TaskRequest {FolderId= "901513903877" }); + + var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + + foreach (var item in result) + { + Console.WriteLine($"Folder name {item.Key} - {item.Value}"); + } + + Assert.IsNotNull(result); + } + + [TestMethod] + public async Task PrimaryListDataHandler_works() + { + var handler = new PrimaryListDataHandler(InvocationContext, new ListRequest {FolderId= "901513903877" }); + + var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + + foreach (var item in result) + { + Console.WriteLine($"Folder name {item.Key} - {item.Value}"); + } + + Assert.IsNotNull(result); + } + } From 90fcb65e4eae8622529200fdf7bc53c2b48e54bf Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 18:09:47 +0200 Subject: [PATCH 02/11] Addind space and team ids to authentication connection inputs --- ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs index 54258a7..768c36b 100644 --- a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs +++ b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs @@ -15,9 +15,8 @@ namespace Apps.ClickUp.Webhooks.Handlers; public abstract class BaseWebhookHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest input) : ClickUpInvocable(invocationContext), IWebhookEventHandler { protected abstract string EventType { get; } - protected WebhookScopeRequest Scope { get; } - - private ClickUpClient Client { get; } + protected WebhookScopeRequest Scope { get; } = input; + private ClickUpClient Client { get; } = new(); public Task SubscribeAsync(IEnumerable creds, Dictionary values) { From 195a7af62ec7bc5bc5e13fb4d46167e74760e86c Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 18:55:34 +0200 Subject: [PATCH 03/11] Rmeoved unused handlers --- ClickUp/Actions/GoalActions.cs | 25 +++++++------- ClickUp/Actions/SpaceActions.cs | 19 +++-------- ClickUp/Actions/TagActions.cs | 2 +- ClickUp/Actions/UserGroupActions.cs | 19 +++++------ .../Folder/FolderCustomFieldDataHandler.cs | 13 ------- .../Folder/FolderListDataHandler.cs | 13 ------- .../Folder/FolderTaskDataHandler.cs | 15 -------- .../Folder/PrimaryFolderDataHandler.cs | 13 ------- .../{Folder => }/FolderDataHandler.cs | 2 +- .../Space/PrimarySpaceDataHandler.cs | 13 ------- .../Space/SpaceCustomFieldDataHandler.cs | 13 ------- .../Space/SpaceFolderDataHandler.cs | 13 ------- .../Space/SpaceListDataHandler.cs | 13 ------- .../Space/SpaceTagDataHandler.cs | 13 ------- .../Space/SpaceTaskDataHandler.cs | 15 -------- .../{Space => }/SpaceDataHandler.cs | 7 ++-- ClickUp/DataSourceHandlers/TagDataHandler.cs | 11 +++--- ClickUp/DataSourceHandlers/TeamDataHandler.cs | 34 ------------------- .../Request/CustomField/CustomFieldRequest.cs | 8 ++--- .../Models/Request/Folder/FolderRequest.cs | 2 -- ClickUp/Models/Request/List/ListRequest.cs | 2 +- ClickUp/Models/Request/Space/SpaceRequest.cs | 7 +--- ClickUp/Models/Request/Tag/TagRequest.cs | 9 ----- ClickUp/Models/Request/Task/TaskRequest.cs | 2 +- ClickUp/Models/Request/Team/TeamRequest.cs | 12 ------- .../Handlers/Folder/FolderCreatedHandler.cs | 5 ++- .../Handlers/Folder/FolderDeletedHandler.cs | 3 +- .../Handlers/Folder/FolderUpdatedHandler.cs | 5 ++- .../Handlers/Goal/GoalCreatedHandler.cs | 5 ++- .../Handlers/Goal/GoalDeletedHandler.cs | 3 +- .../KeyResult/KeyResultCreatedHandler.cs | 5 ++- .../KeyResult/KeyResultDeletedHandler.cs | 3 +- .../KeyResult/KeyResultUpdatedHandler.cs | 5 ++- .../Handlers/List/ListCreatedHandler.cs | 5 ++- .../Handlers/List/ListDeletedHandler.cs | 5 ++- .../Handlers/Space/SpaceUpdatedHandler.cs | 5 ++- .../Tasks/TaskCommentPostedHandler.cs | 5 ++- .../Handlers/Tasks/TaskCreatedHandler.cs | 5 ++- .../Handlers/Tasks/TaskDeletedHandler.cs | 5 ++- .../Tasks/TaskDueDateUpdatedHandler.cs | 5 ++- .../Handlers/Tasks/TaskMovedHandler.cs | 5 ++- .../Tasks/TaskPriorityUpdatedHandler.cs | 5 ++- .../Tasks/TaskStatusUpdatedHandler.cs | 5 ++- .../Handlers/Tasks/TaskTagUpdatedHandler.cs | 5 ++- .../Tasks/TaskTimeEstimateUpdatedHandler.cs | 5 ++- .../Handlers/Tasks/TaskUpdatedHandler.cs | 5 ++- .../Webhooks/Handlers/WebhookScopeRequest.cs | 1 - Tests.ClickUp/DataHandlerTests.cs | 28 +++++++-------- Tests.ClickUp/GoalsTests.cs | 21 ++++++++++++ 49 files changed, 117 insertions(+), 327 deletions(-) delete mode 100644 ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs rename ClickUp/DataSourceHandlers/{Folder => }/FolderDataHandler.cs (96%) delete mode 100644 ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs delete mode 100644 ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs rename ClickUp/DataSourceHandlers/{Space => }/SpaceDataHandler.cs (79%) delete mode 100644 ClickUp/DataSourceHandlers/TeamDataHandler.cs delete mode 100644 ClickUp/Models/Request/Team/TeamRequest.cs create mode 100644 Tests.ClickUp/GoalsTests.cs diff --git a/ClickUp/Actions/GoalActions.cs b/ClickUp/Actions/GoalActions.cs index b3d7dc7..183e53a 100644 --- a/ClickUp/Actions/GoalActions.cs +++ b/ClickUp/Actions/GoalActions.cs @@ -3,7 +3,6 @@ using Apps.ClickUp.Constants; using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request.Goal; -using Apps.ClickUp.Models.Request.Team; using Apps.ClickUp.Models.Response.Goal; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; @@ -21,46 +20,46 @@ public class GoalActions : ClickUpActions public GoalActions(InvocationContext invocationContext) : base(invocationContext) { } - + [Action("Search goals", Description = "Get all goals")] public Task GetGoals([ActionParameter] ListGoalsQuery query) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team)}{ApiEndpoints.Goals}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Goals}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); - + return Client.ExecuteWithErrorHandling(request); } - + [Action("Create goal", Description = "Create a new goal")] public async Task CreateGoal([ActionParameter] CreateGoalRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team)}{ApiEndpoints.Goals}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Goals}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); - + var response = await Client.ExecuteWithErrorHandling(request); return response.Goal; } - + [Action("Get goal", Description = "Get specific goal details")] public async Task GetGoal([ActionParameter] GoalRequest goal) { var endpoint = $"{ApiEndpoints.Goals}/{goal.GoalId}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); - + var response = await Client.ExecuteWithErrorHandling(request); return response.Goal; } - + [Action("Delete goal", Description = "Delete specific goal")] public Task DeleteGoal([ActionParameter] GoalRequest goal) { var endpoint = $"{ApiEndpoints.Goals}/{goal.GoalId}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); - + return Client.ExecuteWithErrorHandling(request); } - + [Action("Create key result", Description = "Create goal key result")] public async Task CreateKeyResult( [ActionParameter] GoalRequest goal, @@ -69,7 +68,7 @@ public async Task CreateKeyResult( var endpoint = $"{ApiEndpoints.Goals}/{goal.GoalId}{ApiEndpoints.KeyResults}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); - + var response = await Client.ExecuteWithErrorHandling(request); return response.KeyResult; } diff --git a/ClickUp/Actions/SpaceActions.cs b/ClickUp/Actions/SpaceActions.cs index c1f67c3..11081bd 100644 --- a/ClickUp/Actions/SpaceActions.cs +++ b/ClickUp/Actions/SpaceActions.cs @@ -41,7 +41,7 @@ public Task CreateSpace([ActionParameter] CreateSpaceRequest input) return Client.ExecuteWithErrorHandling(request); } - [Action("Update space", Description = "Update specific space")] + [Action("Update space", Description = "Update space")] public Task UpdateSpace([ActionParameter] UpdateSpaceRequest input) { var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}"; @@ -51,23 +51,12 @@ public Task UpdateSpace([ActionParameter] UpdateSpaceRequest input) return Client.ExecuteWithErrorHandling(request); } - [Action("Get space", Description = "Get details of a specific space")] - public Task GetSpace( - [ActionParameter] SpaceRequest space) + [Action("Get space", Description = "Get details of a space")] + public Task GetSpace() { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); } - - [Action("Delete space", Description = "Delete specific space")] - public Task DeleteSpace( - [ActionParameter] SpaceRequest space) - { - var endpoint = $"{ApiEndpoints.Spaces}/{space.SpaceId}"; - var request = new ClickUpRequest(endpoint, Method.Delete, Creds); - - return Client.ExecuteWithErrorHandling(request); - } } \ No newline at end of file diff --git a/ClickUp/Actions/TagActions.cs b/ClickUp/Actions/TagActions.cs index adc6090..2546c69 100644 --- a/ClickUp/Actions/TagActions.cs +++ b/ClickUp/Actions/TagActions.cs @@ -46,7 +46,7 @@ public async Task CreateTag([ActionParameter] CreateTagInput input) [Action("Delete tag", Description = "Delete specific space tag")] public Task DeleteTag([ActionParameter] TagRequest tag) { - var endpoint = $"{ApiEndpoints.Spaces}/{tag.SpaceId}{ApiEndpoints.Tags}/{tag.TagName}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Tags}/{tag.TagName}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); return Client.ExecuteWithErrorHandling(request); diff --git a/ClickUp/Actions/UserGroupActions.cs b/ClickUp/Actions/UserGroupActions.cs index 7e9465d..9e8d452 100644 --- a/ClickUp/Actions/UserGroupActions.cs +++ b/ClickUp/Actions/UserGroupActions.cs @@ -3,7 +3,6 @@ using Apps.ClickUp.Constants; using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request.Group; -using Apps.ClickUp.Models.Request.Team; using Apps.ClickUp.Models.Response.Group; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; @@ -21,32 +20,32 @@ public class UserGroupActions : ClickUpActions public UserGroupActions(InvocationContext invocationContext) : base(invocationContext) { } - + [Action("Search user groups", Description = "Get all user groups")] public Task GetGroups([ActionParameter] ListGroupsQuery query) { var endpoint = ApiEndpoints.Groups; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); - + return Client.ExecuteWithErrorHandling(request); - } - + } + [Action("Create user group", Description = "Create a new user group")] public Task CreateGroup([ActionParameter] CreateGroupRequest input) { var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Groups}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); - + return Client.ExecuteWithErrorHandling(request); - } - + } + [Action("Delete user group", Description = "Delete specific user group")] public Task DeleteGroup([ActionParameter] GroupRequest group) { var endpoint = $"{ApiEndpoints.Groups}/{group.GroupId}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); - + return Client.ExecuteWithErrorHandling(request); - } + } } \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs deleted file mode 100644 index 861c49a..0000000 --- a/ClickUp/DataSourceHandlers/Folder/FolderCustomFieldDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Apps.ClickUp.Models.Request.CustomField; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; - -namespace Apps.ClickUp.DataSourceHandlers.Folder; - -public class FolderCustomFieldDataHandler : FolderDataHandler -{ - public FolderCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : - base(invocationContext) - { - } -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs deleted file mode 100644 index 81c220e..0000000 --- a/ClickUp/DataSourceHandlers/Folder/FolderListDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -//using Apps.ClickUp.Models.Request.List; -//using Blackbird.Applications.Sdk.Common; -//using Blackbird.Applications.Sdk.Common.Invocation; - -//namespace Apps.ClickUp.DataSourceHandlers.Folder; - -//public class FolderListDataHandler : FolderDataHandler -//{ -// public FolderListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : -// base(invocationContext, request.SpaceId) -// { -// } -//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs deleted file mode 100644 index f87e1eb..0000000 --- a/ClickUp/DataSourceHandlers/Folder/FolderTaskDataHandler.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Apps.ClickUp.Constants; -using Apps.ClickUp.Models.Request.Task; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; - -namespace Apps.ClickUp.DataSourceHandlers.Folder; - -public class FolderTaskDataHandler : FolderDataHandler -{ - public FolderTaskDataHandler(InvocationContext invocationContext) : - base(invocationContext) - { - } -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs b/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs deleted file mode 100644 index c7c2137..0000000 --- a/ClickUp/DataSourceHandlers/Folder/PrimaryFolderDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Apps.ClickUp.Models.Request.Folder; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; - -namespace Apps.ClickUp.DataSourceHandlers.Folder; - -public class PrimaryFolderDataHandler : FolderDataHandler -{ - public PrimaryFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : - base(invocationContext) - { - } -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs b/ClickUp/DataSourceHandlers/FolderDataHandler.cs similarity index 96% rename from ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs rename to ClickUp/DataSourceHandlers/FolderDataHandler.cs index b32714d..61706f4 100644 --- a/ClickUp/DataSourceHandlers/Folder/FolderDataHandler.cs +++ b/ClickUp/DataSourceHandlers/FolderDataHandler.cs @@ -7,7 +7,7 @@ using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; -namespace Apps.ClickUp.DataSourceHandlers.Folder; +namespace Apps.ClickUp.DataSourceHandlers; public class FolderDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { diff --git a/ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs b/ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs deleted file mode 100644 index 14b79b8..0000000 --- a/ClickUp/DataSourceHandlers/Space/PrimarySpaceDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Apps.ClickUp.Models.Request.Space; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; - -namespace Apps.ClickUp.DataSourceHandlers.Space; - -public class PrimarySpaceDataHandler : SpaceDataHandler -{ - public PrimarySpaceDataHandler(InvocationContext invocationContext, [ActionParameter] SpaceRequest request) : - base(invocationContext, request.TeamId) - { - } -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs deleted file mode 100644 index f7baf6b..0000000 --- a/ClickUp/DataSourceHandlers/Space/SpaceCustomFieldDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -//using Apps.ClickUp.Models.Request.CustomField; -//using Blackbird.Applications.Sdk.Common; -//using Blackbird.Applications.Sdk.Common.Invocation; - -//namespace Apps.ClickUp.DataSourceHandlers.Space; - -//public class SpaceCustomFieldDataHandler : SpaceDataHandler -//{ -// public SpaceCustomFieldDataHandler(InvocationContext invocationContext, [ActionParameter] CustomFieldRequest request) : -// base(invocationContext, request.TeamId) -// { -// } -//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs deleted file mode 100644 index c243b4a..0000000 --- a/ClickUp/DataSourceHandlers/Space/SpaceFolderDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -//using Apps.ClickUp.Models.Request.Folder; -//using Blackbird.Applications.Sdk.Common; -//using Blackbird.Applications.Sdk.Common.Invocation; - -//namespace Apps.ClickUp.DataSourceHandlers.Space; - -//public class SpaceFolderDataHandler : SpaceDataHandler -//{ -// public SpaceFolderDataHandler(InvocationContext invocationContext, [ActionParameter] FolderRequest request) : -// base(invocationContext, request.TeamId) -// { -// } -//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs deleted file mode 100644 index 979f0f1..0000000 --- a/ClickUp/DataSourceHandlers/Space/SpaceListDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -//using Apps.ClickUp.Models.Request.List; -//using Blackbird.Applications.Sdk.Common; -//using Blackbird.Applications.Sdk.Common.Invocation; - -//namespace Apps.ClickUp.DataSourceHandlers.Space; - -//public class SpaceListDataHandler : SpaceDataHandler -//{ -// public SpaceListDataHandler(InvocationContext invocationContext, [ActionParameter] ListRequest request) : -// base(invocationContext, request.TeamId) -// { -// } -//} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs deleted file mode 100644 index 1ae8bb1..0000000 --- a/ClickUp/DataSourceHandlers/Space/SpaceTagDataHandler.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Apps.ClickUp.Models.Request.Tag; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; - -namespace Apps.ClickUp.DataSourceHandlers.Space; - -public class SpaceTagDataHandler : SpaceDataHandler -{ - public SpaceTagDataHandler(InvocationContext invocationContext, [ActionParameter] TagRequest request) : - base(invocationContext, request.TeamId) - { - } -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs b/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs deleted file mode 100644 index 6148226..0000000 --- a/ClickUp/DataSourceHandlers/Space/SpaceTaskDataHandler.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Apps.ClickUp.Constants; -using Apps.ClickUp.Models.Request.Task; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; - -namespace Apps.ClickUp.DataSourceHandlers.Space; - -public class SpaceTaskDataHandler : SpaceDataHandler -{ - public SpaceTaskDataHandler(InvocationContext invocationContext, [ActionParameter] TaskRequest request) : - base(invocationContext, invocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value) - { - } -} \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs similarity index 79% rename from ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs rename to ClickUp/DataSourceHandlers/SpaceDataHandler.cs index 2acd598..b608d04 100644 --- a/ClickUp/DataSourceHandlers/Space/SpaceDataHandler.cs +++ b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs @@ -4,17 +4,18 @@ using Apps.ClickUp.Models.Response.Space; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; -namespace Apps.ClickUp.DataSourceHandlers.Space; +namespace Apps.ClickUp.DataSourceHandlers; public class SpaceDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { private readonly string _teamId; - public SpaceDataHandler(InvocationContext invocationContext, string teamId) : base(invocationContext) + public SpaceDataHandler(InvocationContext invocationContext) : base(invocationContext) { - _teamId = teamId; + _teamId = InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value; } public async Task> GetDataAsync(DataSourceContext context, diff --git a/ClickUp/DataSourceHandlers/TagDataHandler.cs b/ClickUp/DataSourceHandlers/TagDataHandler.cs index 428b837..c6471f2 100644 --- a/ClickUp/DataSourceHandlers/TagDataHandler.cs +++ b/ClickUp/DataSourceHandlers/TagDataHandler.cs @@ -6,27 +6,28 @@ using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers; public class TagDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { - private readonly TagRequest _request; + private readonly string _spaceId; - public TagDataHandler(InvocationContext invocationContext, [ActionParameter] TagRequest request) : base( + public TagDataHandler(InvocationContext invocationContext) : base( invocationContext) { - _request = request; + _spaceId = InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value; } public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_request.SpaceId)) + if (string.IsNullOrEmpty(_spaceId)) throw new("You should specify Space ID first"); - var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_request.SpaceId}/tag", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_spaceId}/tag", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Tags diff --git a/ClickUp/DataSourceHandlers/TeamDataHandler.cs b/ClickUp/DataSourceHandlers/TeamDataHandler.cs deleted file mode 100644 index 866c9a4..0000000 --- a/ClickUp/DataSourceHandlers/TeamDataHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Apps.ClickUp.Api; -using Apps.ClickUp.Constants; -using Apps.ClickUp.Models.Response.Team; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Authentication; -using Blackbird.Applications.Sdk.Common.Dynamic; -using Blackbird.Applications.Sdk.Common.Invocation; -using RestSharp; - -namespace Apps.ClickUp.DataSourceHandlers; - -public class TeamDataHandler : BaseInvocable, IAsyncDataSourceHandler -{ - private IEnumerable Creds => - InvocationContext.AuthenticationCredentialsProviders; - - public TeamDataHandler(InvocationContext invocationContext) : base(invocationContext) - { - } - - public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) - { - var client = new ClickUpClient(); - - var request = new ClickUpRequest(ApiEndpoints.Teams, Method.Get, Creds); - var teams = await client.ExecuteWithErrorHandling(request); - - return teams.Teams - .Where(x => context.SearchString is null || - x.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase)) - .Take(20) - .ToDictionary(x => x.Id, x => x.Name); - } -} \ No newline at end of file diff --git a/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs b/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs index 61d92a3..fc98cef 100644 --- a/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs +++ b/ClickUp/Models/Request/CustomField/CustomFieldRequest.cs @@ -1,7 +1,5 @@ using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Folder; using Apps.ClickUp.DataSourceHandlers.List; -using Apps.ClickUp.DataSourceHandlers.Space; using Apps.ClickUp.DataSourceHandlers.Task; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; @@ -13,15 +11,15 @@ public class CustomFieldRequest [Display("Folder ID")] [DataSource(typeof(FolderDataHandler))] public string FolderId { get; set; } - + [Display("List ID")] [DataSource(typeof(ListCustomFieldDataHandler))] public string ListId { get; set; } - + [Display("Task ID")] [DataSource(typeof(TaskCustomFieldDataHandler))] public string TaskId { get; set; } - + [Display("Field ID")] [DataSource(typeof(CustomFieldDataHandler))] public string FieldId { get; set; } diff --git a/ClickUp/Models/Request/Folder/FolderRequest.cs b/ClickUp/Models/Request/Folder/FolderRequest.cs index 59c7151..b8ed3e0 100644 --- a/ClickUp/Models/Request/Folder/FolderRequest.cs +++ b/ClickUp/Models/Request/Folder/FolderRequest.cs @@ -1,6 +1,4 @@ using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Folder; -using Apps.ClickUp.DataSourceHandlers.Space; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; diff --git a/ClickUp/Models/Request/List/ListRequest.cs b/ClickUp/Models/Request/List/ListRequest.cs index 5f67dc4..55bb816 100644 --- a/ClickUp/Models/Request/List/ListRequest.cs +++ b/ClickUp/Models/Request/List/ListRequest.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers; using Apps.ClickUp.DataSourceHandlers.List; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; diff --git a/ClickUp/Models/Request/Space/SpaceRequest.cs b/ClickUp/Models/Request/Space/SpaceRequest.cs index 53fa685..fe52856 100644 --- a/ClickUp/Models/Request/Space/SpaceRequest.cs +++ b/ClickUp/Models/Request/Space/SpaceRequest.cs @@ -1,5 +1,4 @@ using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Space; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; @@ -7,11 +6,7 @@ namespace Apps.ClickUp.Models.Request.Space; public class SpaceRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - [Display("Space ID")] - [DataSource(typeof(PrimarySpaceDataHandler))] + [DataSource(typeof(SpaceDataHandler))] public string SpaceId { get; set; } } \ No newline at end of file diff --git a/ClickUp/Models/Request/Tag/TagRequest.cs b/ClickUp/Models/Request/Tag/TagRequest.cs index fe71470..675640e 100644 --- a/ClickUp/Models/Request/Tag/TagRequest.cs +++ b/ClickUp/Models/Request/Tag/TagRequest.cs @@ -1,5 +1,4 @@ using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Space; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; @@ -7,14 +6,6 @@ namespace Apps.ClickUp.Models.Request.Tag; public class TagRequest { - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } - - [Display("Space ID")] - [DataSource(typeof(SpaceTagDataHandler))] - public string SpaceId { get; set; } - [Display("Tag name")] [DataSource(typeof(TagDataHandler))] public string TagName { get; set; } diff --git a/ClickUp/Models/Request/Task/TaskRequest.cs b/ClickUp/Models/Request/Task/TaskRequest.cs index 659c913..b0a01cc 100644 --- a/ClickUp/Models/Request/Task/TaskRequest.cs +++ b/ClickUp/Models/Request/Task/TaskRequest.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers; using Apps.ClickUp.DataSourceHandlers.List; using Apps.ClickUp.DataSourceHandlers.Task; using Blackbird.Applications.Sdk.Common; diff --git a/ClickUp/Models/Request/Team/TeamRequest.cs b/ClickUp/Models/Request/Team/TeamRequest.cs deleted file mode 100644 index e69b642..0000000 --- a/ClickUp/Models/Request/Team/TeamRequest.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Apps.ClickUp.DataSourceHandlers; -using Blackbird.Applications.Sdk.Common; -using Blackbird.Applications.Sdk.Common.Dynamic; - -namespace Apps.ClickUp.Models.Request.Team; - -public class TeamRequest -{ - [Display("Team")] - [DataSource(typeof(TeamDataHandler))] - public string TeamId { get; set; } -} \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs index ed328ab..885d231 100644 --- a/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Folder/FolderCreatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Folder; @@ -8,7 +7,7 @@ public class FolderCreatedHandler : BaseWebhookHandler { protected override string EventType => "folderCreated"; - public FolderCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public FolderCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs index ff90191..f172412 100644 --- a/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Folder/FolderDeletedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Folder; diff --git a/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs index 946c5c8..dd30f21 100644 --- a/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Folder/FolderUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Folder; @@ -8,7 +7,7 @@ public class FolderUpdatedHandler : BaseWebhookHandler { protected override string EventType => "folderUpdated"; - public FolderUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public FolderUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs index 8048911..10480c3 100644 --- a/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Goal/GoalCreatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Goal; @@ -8,7 +7,7 @@ public class GoalCreatedHandler : BaseWebhookHandler { protected override string EventType => "goalCreated"; - public GoalCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public GoalCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs index 1a8c8ed..aa76fc8 100644 --- a/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Goal/GoalDeletedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Goal; diff --git a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs index 4dad059..1ed301a 100644 --- a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultCreatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.KeyResult; @@ -8,7 +7,7 @@ public class KeyResultCreatedHandler : BaseWebhookHandler { protected override string EventType => "keyResultCreated"; - public KeyResultCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public KeyResultCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs index 2b3b546..4bb88c8 100644 --- a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultDeletedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.KeyResult; diff --git a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs index 6e0d528..3d060da 100644 --- a/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/KeyResult/KeyResultUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.KeyResult; @@ -8,7 +7,7 @@ public class KeyResultUpdatedHandler : BaseWebhookHandler { protected override string EventType => "keyResultUpdated"; - public KeyResultUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public KeyResultUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs b/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs index deb0446..3e88b10 100644 --- a/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/List/ListCreatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.List; @@ -8,7 +7,7 @@ public class ListCreatedHandler : BaseWebhookHandler { protected override string EventType => "listCreated"; - public ListCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public ListCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs b/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs index ce95d8a..5d53f7a 100644 --- a/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/List/ListDeletedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.List; @@ -8,7 +7,7 @@ public class ListDeletedHandler : BaseWebhookHandler { protected override string EventType => "listDeleted"; - public ListDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public ListDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs index 15a1117..da8c6a9 100644 --- a/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Space/SpaceUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Space; @@ -8,7 +7,7 @@ public class SpaceUpdatedHandler : BaseWebhookHandler { protected override string EventType => "spaceUpdated"; - public SpaceUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public SpaceUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs index 1ec3b40..56c9fc6 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskCommentPostedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskCommentPostedHandler : BaseWebhookHandler { protected override string EventType => "taskCommentPosted"; - public TaskCommentPostedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskCommentPostedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs index e2c3264..232c346 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskCreatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskCreatedHandler : BaseWebhookHandler { protected override string EventType => "taskCreated"; - public TaskCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskCreatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs index 3a77a6d..f336406 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskDeletedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskDeletedHandler : BaseWebhookHandler { protected override string EventType => "taskDeleted"; - public TaskDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskDeletedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs index 27ab838..d07857a 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskDueDateUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskDueDateUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskDueDateUpdated"; - public TaskDueDateUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskDueDateUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs index 12c8410..6f8e36e 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskMovedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskMovedHandler : BaseWebhookHandler { protected override string EventType => "taskMoved"; - public TaskMovedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskMovedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs index 8ae0668..9e58235 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskPriorityUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskPriorityUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskPriorityUpdated"; - public TaskPriorityUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskPriorityUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs index d84bc3c..c1c0dc7 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskStatusUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskStatusUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskStatusUpdated"; - public TaskStatusUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskStatusUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs index f803dd1..75270ed 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskTagUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskTagUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskTagUpdated"; - public TaskTagUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskTagUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs index cdbcde2..f352cb1 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskTimeEstimateUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskTimeEstimateUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskTimeEstimateUpdated"; - public TaskTimeEstimateUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskTimeEstimateUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs index 3f2123a..c9dfa72 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/TaskUpdatedHandler.cs @@ -1,5 +1,4 @@ -using Apps.ClickUp.Models.Request.Team; -using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; namespace Apps.ClickUp.Webhooks.Handlers.Tasks; @@ -8,7 +7,7 @@ public class TaskUpdatedHandler : BaseWebhookHandler { protected override string EventType => "taskUpdated"; - public TaskUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext,team) + public TaskUpdatedHandler(InvocationContext invocationContext, [WebhookParameter] WebhookScopeRequest team) : base(invocationContext, team) { } } \ No newline at end of file diff --git a/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs b/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs index 830eb9f..1994428 100644 --- a/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs +++ b/ClickUp/Webhooks/Handlers/WebhookScopeRequest.cs @@ -1,5 +1,4 @@ using Apps.ClickUp.DataSourceHandlers; -using Apps.ClickUp.DataSourceHandlers.Folder; using Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; diff --git a/Tests.ClickUp/DataHandlerTests.cs b/Tests.ClickUp/DataHandlerTests.cs index c168091..e1b2071 100644 --- a/Tests.ClickUp/DataHandlerTests.cs +++ b/Tests.ClickUp/DataHandlerTests.cs @@ -1,4 +1,4 @@ -using Apps.ClickUp.DataSourceHandlers.Folder; +using Apps.ClickUp.DataSourceHandlers; using Apps.ClickUp.DataSourceHandlers.List; using Apps.ClickUp.Models.Request.List; using Tests.ClickUp.Base; @@ -13,9 +13,9 @@ public async Task FolderDataHandler_works() { var handler = new FolderDataHandler(InvocationContext); - var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + var result = await handler.GetDataAsync(new() { }, CancellationToken.None); - foreach (var item in result) + foreach (var item in result) { Console.WriteLine($"Folder name {item.Key} - {item.Value}"); } @@ -26,11 +26,11 @@ public async Task FolderDataHandler_works() [TestMethod] public async Task ListCustomFieldDataHandler_works() { - var handler = new ListCustomFieldDataHandler(InvocationContext, new Apps.ClickUp.Models.Request.CustomField.CustomFieldRequest { FolderId= "901513903877" }); + var handler = new ListCustomFieldDataHandler(InvocationContext, new Apps.ClickUp.Models.Request.CustomField.CustomFieldRequest { FolderId = "901513903877" }); - var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + var result = await handler.GetDataAsync(new() { }, CancellationToken.None); - foreach (var item in result) + foreach (var item in result) { Console.WriteLine($"Folder name {item.Key} - {item.Value}"); } @@ -43,9 +43,9 @@ public async Task ListDataHandler_works() { var handler = new ListDataHandler(InvocationContext, "901513903877"); - var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + var result = await handler.GetDataAsync(new() { }, CancellationToken.None); - foreach (var item in result) + foreach (var item in result) { Console.WriteLine($"Folder name {item.Key} - {item.Value}"); } @@ -56,11 +56,11 @@ public async Task ListDataHandler_works() [TestMethod] public async Task ListTaskDataHandler_works() { - var handler = new ListTaskDataHandler(InvocationContext, new Apps.ClickUp.Models.Request.Task.TaskRequest {FolderId= "901513903877" }); + var handler = new ListTaskDataHandler(InvocationContext, new Apps.ClickUp.Models.Request.Task.TaskRequest { FolderId = "901513903877" }); - var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + var result = await handler.GetDataAsync(new() { }, CancellationToken.None); - foreach (var item in result) + foreach (var item in result) { Console.WriteLine($"Folder name {item.Key} - {item.Value}"); } @@ -71,11 +71,11 @@ public async Task ListTaskDataHandler_works() [TestMethod] public async Task PrimaryListDataHandler_works() { - var handler = new PrimaryListDataHandler(InvocationContext, new ListRequest {FolderId= "901513903877" }); + var handler = new PrimaryListDataHandler(InvocationContext, new ListRequest { FolderId = "901513903877" }); - var result = await handler.GetDataAsync(new(){}, CancellationToken.None); + var result = await handler.GetDataAsync(new() { }, CancellationToken.None); - foreach (var item in result) + foreach (var item in result) { Console.WriteLine($"Folder name {item.Key} - {item.Value}"); } diff --git a/Tests.ClickUp/GoalsTests.cs b/Tests.ClickUp/GoalsTests.cs new file mode 100644 index 0000000..36f9dcb --- /dev/null +++ b/Tests.ClickUp/GoalsTests.cs @@ -0,0 +1,21 @@ +using Apps.ClickUp.Models.Request.Goal; +using Tests.ClickUp.Base; + +namespace Tests.ClickUp +{ + [TestClass] + public class GoalsTests : TestBase + { + [TestMethod] + public async Task GetGoals_works() + { + var action = new Apps.ClickUp.Actions.GoalActions(InvocationContext); + + var result = await action.GetGoals(new ListGoalsQuery { }); + + Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(result)); + + Assert.IsNotNull(result); + } + } +} From f92f38a50d2a32a509c99cad5c59a6ad567bb013 Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 19:03:27 +0200 Subject: [PATCH 04/11] Removed unused handlers --- .../Tasks/DataHandlers/FolderWebhookDataHandler.cs | 14 -------------- .../Tasks/DataHandlers/SpaceWebhookDataHandler.cs | 14 -------------- .../Tasks/DataHandlers/TaskWebhookDataHandler.cs | 3 ++- 3 files changed, 2 insertions(+), 29 deletions(-) delete mode 100644 ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs delete mode 100644 ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs diff --git a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs deleted file mode 100644 index aeaf040..0000000 --- a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/FolderWebhookDataHandler.cs +++ /dev/null @@ -1,14 +0,0 @@ -//using Apps.ClickUp.DataSourceHandlers.Folder; -//using Blackbird.Applications.Sdk.Common.Invocation; - -//namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers -//{ -// public class FolderWebhookDataHandler : FolderDataHandler -// { -// public FolderWebhookDataHandler(InvocationContext invocationContext, WebhookScopeRequest request) : -// base(invocationContext, request.SpaceId) -// { - -// } -// } -//} diff --git a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs deleted file mode 100644 index c3b72c0..0000000 --- a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/SpaceWebhookDataHandler.cs +++ /dev/null @@ -1,14 +0,0 @@ -//using Apps.ClickUp.DataSourceHandlers.Space; -//using Blackbird.Applications.Sdk.Common.Invocation; - -//namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers -//{ -// public class SpaceWebhookDataHandler : SpaceDataHandler -// { -// public SpaceWebhookDataHandler(InvocationContext invocationContext, WebhookScopeRequest request) : -// base(invocationContext, request.TeamId) -// { - -// } -// } -//} diff --git a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs index fe86130..6cbc127 100644 --- a/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs +++ b/ClickUp/Webhooks/Handlers/Tasks/DataHandlers/TaskWebhookDataHandler.cs @@ -1,11 +1,12 @@ using Apps.ClickUp.DataSourceHandlers.Task; +using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Invocation; namespace Apps.ClickUp.Webhooks.Handlers.Tasks.DataHandlers { public class TaskWebhookDataHandler : TaskDataHandler { - public TaskWebhookDataHandler(InvocationContext invocationContext, WebhookScopeRequest request) : + public TaskWebhookDataHandler(InvocationContext invocationContext, [ActionParameter] WebhookScopeRequest request) : base(invocationContext, request.ListId) { From 90d230e8011a5750be7dc879c79bbaca6249dd0c Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 19:39:07 +0200 Subject: [PATCH 05/11] Small updates --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a85766..7d266e8 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ ClickUp project management software that allows you to plan, track and collabora ### Spaces - **Search spaces** returns all spaces of specified `team`. -- **Get/create/update/delete space** +- **Get/create/update space** ### Tags From f407289d631f28f90c854640b5e8ae0dca58aeea Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 20:06:21 +0200 Subject: [PATCH 06/11] Updated docs --- ClickUp/image/clickup-space-id.png | Bin 0 -> 66155 bytes ClickUp/image/clickup-team-id.png | Bin 0 -> 48023 bytes README.md | 4 ++++ 3 files changed, 4 insertions(+) create mode 100644 ClickUp/image/clickup-space-id.png create mode 100644 ClickUp/image/clickup-team-id.png diff --git a/ClickUp/image/clickup-space-id.png b/ClickUp/image/clickup-space-id.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5a59a76af019718bd7cf452834f6c2cfdbe100 GIT binary patch literal 66155 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

^KOsoDfjhNHvXTDMDWbJ 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

4uo_g=gz~#eX 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 7d266e8..915cc86 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,10 @@ ClickUp project management software that allows you to plan, track and collabora 4. Go to ClickUp personal settings and click _Apps_. 5. Click _Generate_ under the _API Token_ label 6. Copy API token and paste it to the appropriate field in the BlackBird +7. Input Team ID you are working under. You can find it in your URL + ![example1](ClickUp/image/clickup-team-id.png) +8. Input Space ID you are working under. You can find it in your URL + ![example2](ClickUp/image/clickup-space-id.png) 7. Click _Connect_. 8. Confirm that the connection has appeared and the status is _Connected_. From 3e3ab688fcb7cddc99d04c3c1936647809d52f87 Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Mon, 2 Feb 2026 20:09:36 +0200 Subject: [PATCH 07/11] Updated sample of appsetting --- Tests.ClickUp/appsettings.json.example | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Tests.ClickUp/appsettings.json.example b/Tests.ClickUp/appsettings.json.example index fc43ad3..e0968eb 100644 --- a/Tests.ClickUp/appsettings.json.example +++ b/Tests.ClickUp/appsettings.json.example @@ -1,6 +1,8 @@ { "ConnectionDefinition": { - "token": "" + "token": "", + "team": "", + "space": "" }, "TestFolder": "TestFiles" } \ No newline at end of file From c1d836a49739801ec59b30647ea631b36df1bd14 Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Tue, 3 Feb 2026 11:53:05 +0200 Subject: [PATCH 08/11] Added helper 'CredsProvider' --- ClickUp/Actions/AttachmentActions.cs | 7 ++-- ClickUp/Actions/FolderActions.cs | 23 ++++++------ ClickUp/Actions/GoalActions.cs | 5 ++- ClickUp/Actions/ListActions.cs | 5 ++- ClickUp/Actions/SpaceActions.cs | 9 +++-- ClickUp/Actions/TagActions.cs | 7 ++-- ClickUp/Actions/TaskActions.cs | 2 +- ClickUp/Actions/UserGroupActions.cs | 3 +- .../DataSourceHandlers/FolderDataHandler.cs | 9 +---- ClickUp/DataSourceHandlers/GoalDataHandler.cs | 9 +---- .../DataSourceHandlers/SpaceDataHandler.cs | 9 +---- ClickUp/DataSourceHandlers/TagDataHandler.cs | 9 +---- ClickUp/Utils/CredsProvider.cs | 37 +++++++++++++++++++ 13 files changed, 78 insertions(+), 56 deletions(-) create mode 100644 ClickUp/Utils/CredsProvider.cs diff --git a/ClickUp/Actions/AttachmentActions.cs b/ClickUp/Actions/AttachmentActions.cs index 52e1521..76c723b 100644 --- a/ClickUp/Actions/AttachmentActions.cs +++ b/ClickUp/Actions/AttachmentActions.cs @@ -5,14 +5,15 @@ using Apps.ClickUp.Models.Request; using Apps.ClickUp.Models.Request.Attachment; using Apps.ClickUp.Models.Request.Task; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; +using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces; using RestSharp; using Method = RestSharp.Method; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; namespace Apps.ClickUp.Actions; @@ -38,7 +39,7 @@ public async Task CreateAttachment( var endpoint = $"{ApiEndpoints.Tasks}/{task.TaskId}{ApiEndpoints.Attachments}".WithQuery(query); if (query.CustomTaskIds is true) - endpoint = endpoint.SetQueryParameter("team_id", InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value); + endpoint = endpoint.SetQueryParameter("team_id", InvocationContext.GetTeamId()); var request = new ClickUpRequest(endpoint, Method.Post, Creds) .AddFile("attachment", () => file, input.FileName ?? input.File.Name); diff --git a/ClickUp/Actions/FolderActions.cs b/ClickUp/Actions/FolderActions.cs index e0ad5b5..559d980 100644 --- a/ClickUp/Actions/FolderActions.cs +++ b/ClickUp/Actions/FolderActions.cs @@ -4,13 +4,12 @@ using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request; using Apps.ClickUp.Models.Request.Folder; -using Apps.ClickUp.Models.Request.Space; using Apps.ClickUp.Models.Response.Folder; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Http; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using Blackbird.Applications.Sdk.Utils.Extensions.String; using RestSharp; @@ -22,41 +21,41 @@ public class FolderActions : ClickUpActions public FolderActions(InvocationContext invocationContext) : base(invocationContext) { } - + [Action("Search folders", Description = "Get all folders given a specific space")] public Task GetFolders([ActionParameter] ListQuery query) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Folders}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Folders}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); - + return Client.ExecuteWithErrorHandling(request); } - + [Action("Create folder", Description = "Create a new folder")] public Task CreateFolder([ActionParameter] CreateFolderRequest input) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Folders}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Folders}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); - + return Client.ExecuteWithErrorHandling(request); } - + [Action("Get folder", Description = "Get specific folder details")] public Task GetFolder([ActionParameter] FolderRequest folder) { var endpoint = $"{ApiEndpoints.Folders}/{folder.FolderId}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); - + return Client.ExecuteWithErrorHandling(request); } - + [Action("Delete folder", Description = "Delete specific folder")] public Task DeleteFolder([ActionParameter] FolderRequest folder) { var endpoint = $"{ApiEndpoints.Folders}/{folder.FolderId}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); - + return Client.ExecuteWithErrorHandling(request); } } \ No newline at end of file diff --git a/ClickUp/Actions/GoalActions.cs b/ClickUp/Actions/GoalActions.cs index 183e53a..5422d7b 100644 --- a/ClickUp/Actions/GoalActions.cs +++ b/ClickUp/Actions/GoalActions.cs @@ -4,6 +4,7 @@ using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request.Goal; using Apps.ClickUp.Models.Response.Goal; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; @@ -24,7 +25,7 @@ public GoalActions(InvocationContext invocationContext) : base(invocationContext [Action("Search goals", Description = "Get all goals")] public Task GetGoals([ActionParameter] ListGoalsQuery query) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Goals}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Goals}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); @@ -33,7 +34,7 @@ public Task GetGoals([ActionParameter] ListGoalsQuery query) [Action("Create goal", Description = "Create a new goal")] public async Task CreateGoal([ActionParameter] CreateGoalRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Goals}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Goals}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); diff --git a/ClickUp/Actions/ListActions.cs b/ClickUp/Actions/ListActions.cs index 574ab30..b70bedb 100644 --- a/ClickUp/Actions/ListActions.cs +++ b/ClickUp/Actions/ListActions.cs @@ -7,6 +7,7 @@ using Apps.ClickUp.Models.Request.List; using Apps.ClickUp.Models.Request.Space; using Apps.ClickUp.Models.Response.List; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; @@ -27,7 +28,7 @@ public ListActions(InvocationContext invocationContext) : base(invocationContext [Action("Get lists from space", Description = "Get all lists given a specific space")] public Task GetListsFromSpace([ActionParameter] ListQuery query) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Lists}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Lists}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); @@ -59,7 +60,7 @@ public Task CreateFolderList( [Action("Create space list", Description = "Create a new space list")] public Task CreateSpaceList([ActionParameter] CreateListRequest body) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Lists}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Lists}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(body, JsonConfig.Settings); diff --git a/ClickUp/Actions/SpaceActions.cs b/ClickUp/Actions/SpaceActions.cs index 11081bd..29ff788 100644 --- a/ClickUp/Actions/SpaceActions.cs +++ b/ClickUp/Actions/SpaceActions.cs @@ -5,6 +5,7 @@ using Apps.ClickUp.Models.Request; using Apps.ClickUp.Models.Request.Space; using Apps.ClickUp.Models.Response.Space; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; @@ -25,7 +26,7 @@ public SpaceActions(InvocationContext invocationContext) : base(invocationContex [Action("Search spaces", Description = "Get all spaces given a specific team")] public Task GetSpaces([ActionParameter] ListQuery query) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Spaces}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Spaces}"; var request = new ClickUpRequest(endpoint.WithQuery(query), Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); @@ -34,7 +35,7 @@ public Task GetSpaces([ActionParameter] ListQuery query) [Action("Create space", Description = "Create a new space")] public Task CreateSpace([ActionParameter] CreateSpaceRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Spaces}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Spaces}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); @@ -44,7 +45,7 @@ public Task CreateSpace([ActionParameter] CreateSpaceRequest input) [Action("Update space", Description = "Update space")] public Task UpdateSpace([ActionParameter] UpdateSpaceRequest input) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}"; var request = new ClickUpRequest(endpoint, Method.Put, Creds) .WithJsonBody(input, JsonConfig.Settings); @@ -54,7 +55,7 @@ public Task UpdateSpace([ActionParameter] UpdateSpaceRequest input) [Action("Get space", Description = "Get details of a space")] public Task GetSpace() { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); diff --git a/ClickUp/Actions/TagActions.cs b/ClickUp/Actions/TagActions.cs index 2546c69..8cf510c 100644 --- a/ClickUp/Actions/TagActions.cs +++ b/ClickUp/Actions/TagActions.cs @@ -5,6 +5,7 @@ using Apps.ClickUp.Models.Request.Space; using Apps.ClickUp.Models.Request.Tag; using Apps.ClickUp.Models.Response.Tag; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; @@ -24,7 +25,7 @@ public TagActions(InvocationContext invocationContext) : base(invocationContext) [Action("Search tags", Description = "Get all space tags")] public Task GetTags() { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Tags}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Tags}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); return Client.ExecuteWithErrorHandling(request); @@ -33,7 +34,7 @@ public Task GetTags() [Action("Create tag", Description = "Create a new space tag")] public async Task CreateTag([ActionParameter] CreateTagInput input) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Tags}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Tags}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(new CreateTagRequest(input), JsonConfig.Settings); @@ -46,7 +47,7 @@ public async Task CreateTag([ActionParameter] CreateTagInput input) [Action("Delete tag", Description = "Delete specific space tag")] public Task DeleteTag([ActionParameter] TagRequest tag) { - var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value}{ApiEndpoints.Tags}/{tag.TagName}"; + var endpoint = $"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}{ApiEndpoints.Tags}/{tag.TagName}"; var request = new ClickUpRequest(endpoint, Method.Delete, Creds); return Client.ExecuteWithErrorHandling(request); diff --git a/ClickUp/Actions/TaskActions.cs b/ClickUp/Actions/TaskActions.cs index e32cfb8..d68323d 100644 --- a/ClickUp/Actions/TaskActions.cs +++ b/ClickUp/Actions/TaskActions.cs @@ -27,7 +27,7 @@ public TaskActions(InvocationContext invocationContext) : base(invocationContext } [Action("Search tasks", Description = "Get all tasks given a specific list")] - public Task GetTasksFromList([ActionParameter] ListRequest? list) + public Task GetTasksFromList([ActionParameter] ListRequest list) { var endpoint = $"{ApiEndpoints.Lists}/{list.ListId}{ApiEndpoints.Tasks}"; var request = new ClickUpRequest(endpoint, Method.Get, Creds); diff --git a/ClickUp/Actions/UserGroupActions.cs b/ClickUp/Actions/UserGroupActions.cs index 9e8d452..1cf6779 100644 --- a/ClickUp/Actions/UserGroupActions.cs +++ b/ClickUp/Actions/UserGroupActions.cs @@ -4,6 +4,7 @@ using Apps.ClickUp.Models.Entities; using Apps.ClickUp.Models.Request.Group; using Apps.ClickUp.Models.Response.Group; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Actions; using Blackbird.Applications.Sdk.Common.Invocation; @@ -33,7 +34,7 @@ public Task GetGroups([ActionParameter] ListGroupsQuery quer [Action("Create user group", Description = "Create a new user group")] public Task CreateGroup([ActionParameter] CreateGroupRequest input) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Groups}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Groups}"; var request = new ClickUpRequest(endpoint, Method.Post, Creds) .WithJsonBody(input, JsonConfig.Settings); diff --git a/ClickUp/DataSourceHandlers/FolderDataHandler.cs b/ClickUp/DataSourceHandlers/FolderDataHandler.cs index 61706f4..e179a86 100644 --- a/ClickUp/DataSourceHandlers/FolderDataHandler.cs +++ b/ClickUp/DataSourceHandlers/FolderDataHandler.cs @@ -2,6 +2,7 @@ using Apps.ClickUp.Constants; using Apps.ClickUp.Invocables; using Apps.ClickUp.Models.Response.Folder; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; @@ -11,20 +12,14 @@ namespace Apps.ClickUp.DataSourceHandlers; public class FolderDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { - private readonly string _spaceId; - public FolderDataHandler(InvocationContext invocationContext) : base(invocationContext) { - _spaceId = invocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value; } public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_spaceId)) - throw new("You should specify Space ID first"); - - var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_spaceId}/folder", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}/folder", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Folders diff --git a/ClickUp/DataSourceHandlers/GoalDataHandler.cs b/ClickUp/DataSourceHandlers/GoalDataHandler.cs index 737141c..2d5bfd8 100644 --- a/ClickUp/DataSourceHandlers/GoalDataHandler.cs +++ b/ClickUp/DataSourceHandlers/GoalDataHandler.cs @@ -2,6 +2,7 @@ using Apps.ClickUp.Constants; using Apps.ClickUp.Invocables; using Apps.ClickUp.Models.Response.Goal; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; @@ -11,21 +12,15 @@ namespace Apps.ClickUp.DataSourceHandlers; public class GoalDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { - private readonly string _teamId; - public GoalDataHandler(InvocationContext invocationContext) : base( invocationContext) { - _teamId = InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value; } public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_teamId)) - throw new("You should specify Team ID first"); - - var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{_teamId}/goal", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}/goal", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Goals diff --git a/ClickUp/DataSourceHandlers/SpaceDataHandler.cs b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs index b608d04..377e0ab 100644 --- a/ClickUp/DataSourceHandlers/SpaceDataHandler.cs +++ b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs @@ -2,6 +2,7 @@ using Apps.ClickUp.Constants; using Apps.ClickUp.Invocables; using Apps.ClickUp.Models.Response.Space; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; @@ -11,20 +12,14 @@ namespace Apps.ClickUp.DataSourceHandlers; public class SpaceDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { - private readonly string _teamId; - public SpaceDataHandler(InvocationContext invocationContext) : base(invocationContext) { - _teamId = InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value; } public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_teamId)) - throw new("You should specify Team ID first"); - - var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{_teamId}/space", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}/space", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Spaces diff --git a/ClickUp/DataSourceHandlers/TagDataHandler.cs b/ClickUp/DataSourceHandlers/TagDataHandler.cs index c6471f2..fb9e592 100644 --- a/ClickUp/DataSourceHandlers/TagDataHandler.cs +++ b/ClickUp/DataSourceHandlers/TagDataHandler.cs @@ -3,6 +3,7 @@ using Apps.ClickUp.Invocables; using Apps.ClickUp.Models.Request.Tag; using Apps.ClickUp.Models.Response.Tag; +using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; @@ -13,21 +14,15 @@ namespace Apps.ClickUp.DataSourceHandlers; public class TagDataHandler : ClickUpInvocable, IAsyncDataSourceHandler { - private readonly string _spaceId; - public TagDataHandler(InvocationContext invocationContext) : base( invocationContext) { - _spaceId = InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value; } public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(_spaceId)) - throw new("You should specify Space ID first"); - - var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{_spaceId}/tag", Method.Get, Creds); + var request = new ClickUpRequest($"{ApiEndpoints.Spaces}/{InvocationContext.GetSpaceId()}/tag", Method.Get, Creds); var teams = await Client.ExecuteWithErrorHandling(request); return teams.Tags diff --git a/ClickUp/Utils/CredsProvider.cs b/ClickUp/Utils/CredsProvider.cs new file mode 100644 index 0000000..1bf6a3f --- /dev/null +++ b/ClickUp/Utils/CredsProvider.cs @@ -0,0 +1,37 @@ +using Apps.ClickUp.Constants; +using Blackbird.Applications.Sdk.Common.Exceptions; +using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; + +namespace Apps.ClickUp.Utils +{ + public static class CredsProvider + { + public static string GetTeamId(this InvocationContext ctx) + => ctx.AuthenticationCredentialsProviders.GetRequiredValue(CredsNames.Team, "Team ID"); + + public static string GetSpaceId(this InvocationContext ctx) + => ctx.AuthenticationCredentialsProviders.GetRequiredValue(CredsNames.Space, "Space ID"); + + private static string GetRequiredValue( + this IEnumerable creds, + string credName, + string displayName) + { + try + { + var value = creds.Get(credName)?.Value; + if (string.IsNullOrWhiteSpace(value)) + throw new PluginMisconfigurationException( + $"'{displayName}' is missing in the connection settings. Please re-connect and select '{displayName}'."); + + return value!; + } + catch + { + throw new PluginMisconfigurationException( + $"'{displayName}' is missing in the connection settings. Please re-connect and select '{displayName}'."); + } + } + } +} From c56716d2ef220d456e90ffdcf344011914c59cb8 Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Tue, 3 Feb 2026 17:44:33 +0200 Subject: [PATCH 09/11] Cleaning code --- ClickUp/Actions/FolderActions.cs | 6 +-- ClickUp/Actions/GoalActions.cs | 6 +-- ClickUp/Actions/UserGroupActions.cs | 6 +-- .../DataSourceHandlers/FolderDataHandler.cs | 8 +--- ClickUp/DataSourceHandlers/GoalDataHandler.cs | 9 +--- .../DataSourceHandlers/SpaceDataHandler.cs | 10 ++-- ClickUp/DataSourceHandlers/TagDataHandler.cs | 11 +---- ClickUp/Utils/CredsProvider.cs | 46 +++++++++---------- .../Webhooks/Handlers/BaseWebhookHandler.cs | 7 +-- 9 files changed, 39 insertions(+), 70 deletions(-) diff --git a/ClickUp/Actions/FolderActions.cs b/ClickUp/Actions/FolderActions.cs index 559d980..ef55e8d 100644 --- a/ClickUp/Actions/FolderActions.cs +++ b/ClickUp/Actions/FolderActions.cs @@ -16,12 +16,8 @@ namespace Apps.ClickUp.Actions; [ActionList("Folder")] -public class FolderActions : ClickUpActions +public class FolderActions(InvocationContext invocationContext) : ClickUpActions(invocationContext) { - public FolderActions(InvocationContext invocationContext) : base(invocationContext) - { - } - [Action("Search folders", Description = "Get all folders given a specific space")] public Task GetFolders([ActionParameter] ListQuery query) { diff --git a/ClickUp/Actions/GoalActions.cs b/ClickUp/Actions/GoalActions.cs index 5422d7b..695c531 100644 --- a/ClickUp/Actions/GoalActions.cs +++ b/ClickUp/Actions/GoalActions.cs @@ -16,12 +16,8 @@ namespace Apps.ClickUp.Actions; [ActionList("Goal")] -public class GoalActions : ClickUpActions +public class GoalActions(InvocationContext invocationContext) : ClickUpActions(invocationContext) { - public GoalActions(InvocationContext invocationContext) : base(invocationContext) - { - } - [Action("Search goals", Description = "Get all goals")] public Task GetGoals([ActionParameter] ListGoalsQuery query) { diff --git a/ClickUp/Actions/UserGroupActions.cs b/ClickUp/Actions/UserGroupActions.cs index 1cf6779..5b83d48 100644 --- a/ClickUp/Actions/UserGroupActions.cs +++ b/ClickUp/Actions/UserGroupActions.cs @@ -16,12 +16,8 @@ namespace Apps.ClickUp.Actions; [ActionList("User group")] -public class UserGroupActions : ClickUpActions +public class UserGroupActions(InvocationContext invocationContext) : ClickUpActions(invocationContext) { - public UserGroupActions(InvocationContext invocationContext) : base(invocationContext) - { - } - [Action("Search user groups", Description = "Get all user groups")] public Task GetGroups([ActionParameter] ListGroupsQuery query) { diff --git a/ClickUp/DataSourceHandlers/FolderDataHandler.cs b/ClickUp/DataSourceHandlers/FolderDataHandler.cs index e179a86..47179ac 100644 --- a/ClickUp/DataSourceHandlers/FolderDataHandler.cs +++ b/ClickUp/DataSourceHandlers/FolderDataHandler.cs @@ -5,17 +5,13 @@ using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers; -public class FolderDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +public class FolderDataHandler(InvocationContext invocationContext) + : ClickUpInvocable(invocationContext), IAsyncDataSourceHandler { - public FolderDataHandler(InvocationContext invocationContext) : base(invocationContext) - { - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { diff --git a/ClickUp/DataSourceHandlers/GoalDataHandler.cs b/ClickUp/DataSourceHandlers/GoalDataHandler.cs index 2d5bfd8..9f7a9bf 100644 --- a/ClickUp/DataSourceHandlers/GoalDataHandler.cs +++ b/ClickUp/DataSourceHandlers/GoalDataHandler.cs @@ -5,18 +5,13 @@ using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers; -public class GoalDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +public class GoalDataHandler(InvocationContext invocationContext) + : ClickUpInvocable(invocationContext), IAsyncDataSourceHandler { - public GoalDataHandler(InvocationContext invocationContext) : base( - invocationContext) - { - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { diff --git a/ClickUp/DataSourceHandlers/SpaceDataHandler.cs b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs index 377e0ab..3504335 100644 --- a/ClickUp/DataSourceHandlers/SpaceDataHandler.cs +++ b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs @@ -5,17 +5,13 @@ using Apps.ClickUp.Utils; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers; -public class SpaceDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +public class SpaceDataHandler(InvocationContext invocationContext) + : ClickUpInvocable(invocationContext), IAsyncDataSourceHandler { - public SpaceDataHandler(InvocationContext invocationContext) : base(invocationContext) - { - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { @@ -29,4 +25,4 @@ public async Task> GetDataAsync(DataSourceContext con .Take(20) .ToDictionary(x => x.Id, x => x.Name); } -} \ No newline at end of file +}³ \ No newline at end of file diff --git a/ClickUp/DataSourceHandlers/TagDataHandler.cs b/ClickUp/DataSourceHandlers/TagDataHandler.cs index fb9e592..203166a 100644 --- a/ClickUp/DataSourceHandlers/TagDataHandler.cs +++ b/ClickUp/DataSourceHandlers/TagDataHandler.cs @@ -1,24 +1,17 @@ using Apps.ClickUp.Api; using Apps.ClickUp.Constants; using Apps.ClickUp.Invocables; -using Apps.ClickUp.Models.Request.Tag; using Apps.ClickUp.Models.Response.Tag; using Apps.ClickUp.Utils; -using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.DataSourceHandlers; -public class TagDataHandler : ClickUpInvocable, IAsyncDataSourceHandler +public class TagDataHandler(InvocationContext invocationContext) + : ClickUpInvocable(invocationContext), IAsyncDataSourceHandler { - public TagDataHandler(InvocationContext invocationContext) : base( - invocationContext) - { - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken cancellationToken) { diff --git a/ClickUp/Utils/CredsProvider.cs b/ClickUp/Utils/CredsProvider.cs index 1bf6a3f..10d7ea4 100644 --- a/ClickUp/Utils/CredsProvider.cs +++ b/ClickUp/Utils/CredsProvider.cs @@ -3,35 +3,35 @@ using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; -namespace Apps.ClickUp.Utils +namespace Apps.ClickUp.Utils; + +public static class CredsProvider { - public static class CredsProvider - { - public static string GetTeamId(this InvocationContext ctx) - => ctx.AuthenticationCredentialsProviders.GetRequiredValue(CredsNames.Team, "Team ID"); + public static string GetTeamId(this InvocationContext ctx) + => ctx.AuthenticationCredentialsProviders.GetRequiredValue(CredsNames.Team, "Team ID"); - public static string GetSpaceId(this InvocationContext ctx) - => ctx.AuthenticationCredentialsProviders.GetRequiredValue(CredsNames.Space, "Space ID"); + public static string GetSpaceId(this InvocationContext ctx) + => ctx.AuthenticationCredentialsProviders.GetRequiredValue(CredsNames.Space, "Space ID"); - private static string GetRequiredValue( - this IEnumerable creds, - string credName, - string displayName) + private static string GetRequiredValue( + this IEnumerable creds, + string credName, + string displayName) + { + try { - try - { - var value = creds.Get(credName)?.Value; - if (string.IsNullOrWhiteSpace(value)) - throw new PluginMisconfigurationException( - $"'{displayName}' is missing in the connection settings. Please re-connect and select '{displayName}'."); - - return value!; - } - catch - { + var value = creds.Get(credName)?.Value; + if (string.IsNullOrWhiteSpace(value)) throw new PluginMisconfigurationException( $"'{displayName}' is missing in the connection settings. Please re-connect and select '{displayName}'."); - } + + return value!; + } + catch + { + throw new PluginMisconfigurationException( + $"'{displayName}' is missing in the connection settings. Please re-connect and select '{displayName}'."); } } } + diff --git a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs index 768c36b..c9a8c42 100644 --- a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs +++ b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs @@ -1,6 +1,7 @@ using Apps.ClickUp.Api; using Apps.ClickUp.Constants; using Apps.ClickUp.Invocables; +using Apps.ClickUp.Utils; using Apps.ClickUp.Webhooks.Models.Payloads.Additional; using Apps.ClickUp.Webhooks.Models.Request; using Blackbird.Applications.Sdk.Common.Authentication; @@ -28,7 +29,7 @@ public Task SubscribeAsync(IEnumerable creds, ApplyScope(payload, Scope); - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Webhooks}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Webhooks}"; var request = new ClickUpRequest(endpoint, Method.Post, creds) .WithJsonBody(payload, JsonConfig.Settings); @@ -52,7 +53,7 @@ public async Task UnsubscribeAsync(IEnumerable GetAllWebhooks(IEnumerable creds) { - var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Team).Value}{ApiEndpoints.Webhooks}"; + var endpoint = $"{ApiEndpoints.Teams}/{InvocationContext.GetTeamId()}{ApiEndpoints.Webhooks}"; var request = new ClickUpRequest(endpoint, Method.Get, creds); return Client.ExecuteWithErrorHandling(request); @@ -81,7 +82,7 @@ private void ApplyScope(AddWebhookRequest payload, WebhookScopeRequest scope) return; } - var spaceId = TryParseLong(InvocationContext.AuthenticationCredentialsProviders.Get(CredsNames.Space).Value); + var spaceId = TryParseLong(InvocationContext.GetSpaceId()); if (spaceId.HasValue) { payload.SpaceId = spaceId.Value; From 069f7478a44bcddbd6a3941bf5cc0e92ae9da75b Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Tue, 3 Feb 2026 17:49:06 +0200 Subject: [PATCH 10/11] Bump request --- ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs index c9a8c42..c179982 100644 --- a/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs +++ b/ClickUp/Webhooks/Handlers/BaseWebhookHandler.cs @@ -8,7 +8,6 @@ using Blackbird.Applications.Sdk.Common.Invocation; using Blackbird.Applications.Sdk.Common.Webhooks; using Blackbird.Applications.Sdk.Utils.Extensions.Http; -using Blackbird.Applications.Sdk.Utils.Extensions.Sdk; using RestSharp; namespace Apps.ClickUp.Webhooks.Handlers; From 1a20e5f8fd0967911a7e1ee112aa04a409719ce9 Mon Sep 17 00:00:00 2001 From: Artem Riabushenko Date: Tue, 3 Feb 2026 17:51:05 +0200 Subject: [PATCH 11/11] Bump request --- ClickUp/DataSourceHandlers/SpaceDataHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClickUp/DataSourceHandlers/SpaceDataHandler.cs b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs index 3504335..6b1185b 100644 --- a/ClickUp/DataSourceHandlers/SpaceDataHandler.cs +++ b/ClickUp/DataSourceHandlers/SpaceDataHandler.cs @@ -25,4 +25,4 @@ public async Task> GetDataAsync(DataSourceContext con .Take(20) .ToDictionary(x => x.Id, x => x.Name); } -}³ \ No newline at end of file +} \ No newline at end of file