From 5a177b330a175521bbef2aaf86c602e3ac725674 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Fri, 5 Aug 2022 13:40:03 +0200 Subject: [PATCH] feat: add paging capability in getFlows query --- .../backend/src/graphql/queries/get-flows.ts | 23 +++++++++++++------ packages/backend/src/graphql/schema.graphql | 11 ++++++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/graphql/queries/get-flows.ts b/packages/backend/src/graphql/queries/get-flows.ts index 10e3c68a..5f849393 100644 --- a/packages/backend/src/graphql/queries/get-flows.ts +++ b/packages/backend/src/graphql/queries/get-flows.ts @@ -1,22 +1,31 @@ import Context from '../../types/express/context'; +import paginate from '../../helpers/pagination'; type Params = { appKey?: string; + limit: number; + offset: number; }; const getFlows = async (_parent: unknown, params: Params, context: Context) => { - const flowsQuery = context.currentUser - .$relatedQuery('flows') - .withGraphJoined('[steps.[connection]]') - .orderBy('created_at', 'desc'); + const userStepsQuery = context.currentUser + .$relatedQuery('steps') + .select('flow_id') + .distinctOn('flow_id'); if (params.appKey) { - flowsQuery.where('steps.app_key', params.appKey); + userStepsQuery.where('app_key', params.appKey); } - const flows = await flowsQuery; + const flowsQuery = context.currentUser + .$relatedQuery('flows') + .withGraphFetched('[steps.[connection]]') + .whereIn( + 'flows.id', + userStepsQuery + ); - return flows; + return paginate(flowsQuery, params.limit, params.offset); }; export default getFlows; diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index 3d5eeffa..8762c962 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -4,7 +4,7 @@ type Query { getConnectedApps(name: String): [App] testConnection(id: String!): Connection getFlow(id: String!): Flow - getFlows(appKey: String): [Flow] + getFlows(limit: Int!, offset: Int!, appKey: String): FlowConnection getStepWithTestExecutions(stepId: String!): [Step] getExecutions(limit: Int!, offset: Int!): ExecutionConnection getExecutionSteps( @@ -189,6 +189,15 @@ type Field { clickToCopy: Boolean } +type FlowConnection { + edges: [FlowEdge] + pageInfo: PageInfo +} + +type FlowEdge { + node: Flow +} + type Flow { id: String name: String