Skip to content

Commit

Permalink
allow looking up pinboards (workflow stubs) by path, via `workflow-br…
Browse files Browse the repository at this point in the history
…idge-lambda`, utilising guardian/workflow#1119
  • Loading branch information
twrichards committed Oct 8, 2024
1 parent 0327dfb commit 124a581
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 24 deletions.
64 changes: 43 additions & 21 deletions cdk/lib/__snapshots__/stack.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2282,6 +2282,7 @@ type Query {
# workflow-bridge-lambda queries
listPinboards(searchText: String): [WorkflowStub]
getPinboardsByIds(ids: [String!]!): [WorkflowStub]
getPinboardsByPaths(paths: [String!]!): [WorkflowStub]
getPinboardByComposerId(composerId: String!): WorkflowStub
# grid-bridge-lambda queries
getGridSearchSummary(apiUrl: String!): GridSearchSummary
Expand Down Expand Up @@ -2492,7 +2493,7 @@ type PinboardIdWithItemCounts {
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "addManuallyOpenedPinboardIds",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2513,7 +2514,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "claimItem",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2534,7 +2535,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "createItem",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2555,7 +2556,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "deleteItem",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2576,7 +2577,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "editItem",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2597,7 +2598,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "removeManuallyOpenedPinboardIds",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2618,7 +2619,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "seenItem",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2639,7 +2640,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "setWebPushSubscriptionForUser",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2660,7 +2661,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "visitTourStep",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Mutation",
},
Expand All @@ -2681,7 +2682,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "getGroupPinboardIds",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2702,7 +2703,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "getItemCounts",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2723,7 +2724,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "getMyUser",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2744,7 +2745,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "getUsers",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2765,7 +2766,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "listItems",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2786,7 +2787,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "listLastItemSeenByUsers",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2807,7 +2808,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "database_bridge_lambda_ds",
"FieldName": "searchMentionableUsers",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand Down Expand Up @@ -2932,7 +2933,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "grid_bridge_lambda_ds",
"FieldName": "asGridPayload",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -2953,7 +2954,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "grid_bridge_lambda_ds",
"FieldName": "getGridSearchSummary",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand Down Expand Up @@ -3078,7 +3079,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "workflow_bridge_lambda_ds",
"FieldName": "getPinboardByComposerId",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -3099,7 +3100,28 @@ $util.toJson($ctx.result)",
"DataSourceName": "workflow_bridge_lambda_ds",
"FieldName": "getPinboardsByIds",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
"Type": "AWS::AppSync::Resolver",
},
"pinboardappsyncapiworkflowbridgelambdadsQuerygetPinboardsByPathsResolver98DFC3B6": Object {
"DependsOn": Array [
"pinboardappsyncapiSchema868D9F5B",
"pinboardappsyncapiworkflowbridgelambdadsD8193E3E",
],
"Properties": Object {
"ApiId": Object {
"Fn::GetAtt": Array [
"pinboardappsyncapi9D519400",
"ApiId",
],
},
"DataSourceName": "workflow_bridge_lambda_ds",
"FieldName": "getPinboardsByPaths",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand All @@ -3120,7 +3142,7 @@ $util.toJson($ctx.result)",
"DataSourceName": "workflow_bridge_lambda_ds",
"FieldName": "listPinboards",
"Kind": "UNIT",
"ResponseMappingTemplate": "## schema checksum : aa02bae16942e48366fa36a1cd643d16
"ResponseMappingTemplate": "## schema checksum : 2da07fa954831037a4469ecb7f15e6c9
$util.toJson($ctx.result)",
"TypeName": "Query",
},
Expand Down
5 changes: 5 additions & 0 deletions client/gql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ export const gqlGetPinboardsByIds = gql`
getPinboardsByIds(ids: $ids) { ${pinboardReturnFields} }
}
`;
export const gqlGetPinboardsByPaths = gql`
query MyQuery($paths: [String!]!) {
getPinboardsByPaths(paths: $paths) { ${pinboardReturnFields} }
}
`;
export const gqlGetGroupPinboardIds = gql`
query MyQuery {
getGroupPinboardIds {
Expand Down
1 change: 1 addition & 0 deletions shared/graphql/operations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export const QUERIES = {
workflow: [
"listPinboards",
"getPinboardsByIds",
"getPinboardsByPaths",
"getPinboardByComposerId",
] as const,
grid: ["getGridSearchSummary", "asGridPayload"] as const,
Expand Down
1 change: 1 addition & 0 deletions shared/graphql/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type Query {
# workflow-bridge-lambda queries
listPinboards(searchText: String): [WorkflowStub]
getPinboardsByIds(ids: [String!]!): [WorkflowStub]
getPinboardsByPaths(paths: [String!]!): [WorkflowStub]
getPinboardByComposerId(composerId: String!): WorkflowStub
# grid-bridge-lambda queries
getGridSearchSummary(apiUrl: String!): GridSearchSummary
Expand Down
37 changes: 34 additions & 3 deletions workflow-bridge-lambda/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,28 @@ const WORKFLOW_DATASTORE_API_URL = `http://${getEnvironmentVariableOrThrow(
"workflowDnsName"
)}/api`;

exports.handler = async (event: {
arguments?: { composerId?: string; ids?: string[]; searchText?: string };
}) => {
interface Arguments {
composerId?: string;
ids?: string[];
searchText?: string;
paths?: string[];
}

exports.handler = async (event: { arguments?: Arguments }) => {
if (event.arguments?.composerId) {
return await getPinboardById("content")(event.arguments.composerId);
}
if (event.arguments?.ids) {
// TODO do this in single call using new endpoint added in https://github.com/guardian/workflow/pull/1119
return await Promise.all(
event.arguments.ids
.map(parseFloat) // workflow IDs are Longs
.map(getPinboardById("stubs"))
);
}
if (event.arguments?.paths !== undefined) {
return await getPinboardsByPaths(event.arguments?.paths);
}
if (event.arguments?.searchText !== undefined) {
return await getAllPinboards(event.arguments?.searchText);
}
Expand Down Expand Up @@ -62,6 +71,28 @@ const getPinboardById =
return { ...data.externalData, ...data };
};

const getPinboardsByPaths = async (identifiers: number[] | string[]) => {
const stubsResponse = await fetch(
`${WORKFLOW_DATASTORE_API_URL}/stubsBy$Path?fieldFilter=id,path`,
{
method: "POST",
body: JSON.stringify(identifiers),
}
);

if (!stubsResponse.ok) {
throw Error(`${stubsResponse.status} ${await stubsResponse.text()}`);
}

const stubsResponseBody = (await stubsResponse.json()) as {
data: {
content: { [status: string]: { id: string; path: string } };
};
};

return Object.values(stubsResponseBody.data.content);
};

const getAllPinboardIds = async ({ isTrashed }: { isTrashed: boolean }) => {
const stubsResponse = await fetch(
`${WORKFLOW_DATASTORE_API_URL}/stubs?fieldFilter=id&trashed=${isTrashed}`
Expand Down

0 comments on commit 124a581

Please sign in to comment.