diff --git a/packages/backend/src/config/database.ts b/packages/backend/src/config/database.ts index 559d5e0c..4f8c061b 100644 --- a/packages/backend/src/config/database.ts +++ b/packages/backend/src/config/database.ts @@ -1,4 +1,8 @@ import process from 'process'; +// The following two lines are required to get count values as number. +// More info: https://github.com/knex/knex/issues/387#issuecomment-51554522 +import pg from 'pg'; +pg.types.setTypeParser(20, 'text', parseInt); import knex from 'knex'; import type { Knex } from 'knex'; import knexConfig from '../../knexfile'; @@ -8,10 +12,12 @@ export const client: Knex = knex(knexConfig); const CONNECTION_REFUSED = 'ECONNREFUSED'; -client.raw('SELECT 1') - .catch((err) => { - if (err.code === CONNECTION_REFUSED) { - logger.error('Make sure you have installed PostgreSQL and it is running.', err); - process.exit(); - } - }); +client.raw('SELECT 1').catch((err) => { + if (err.code === CONNECTION_REFUSED) { + logger.error( + 'Make sure you have installed PostgreSQL and it is running.', + err + ); + process.exit(); + } +}); diff --git a/packages/backend/src/graphql/queries/get-app.ts b/packages/backend/src/graphql/queries/get-app.ts index e459319c..32479096 100644 --- a/packages/backend/src/graphql/queries/get-app.ts +++ b/packages/backend/src/graphql/queries/get-app.ts @@ -11,10 +11,14 @@ const getApp = async (_parent: unknown, params: Params, context: Context) => { if (context.currentUser) { const connections = await context.currentUser .$relatedQuery('connections') + .select('connections.*') + .fullOuterJoinRelated('steps') .where({ - key: params.key, - draft: false, + 'connections.key': params.key, + 'connections.draft': false, }) + .countDistinct('steps.flow_id as flowCount') + .groupBy('connections.id') .orderBy('created_at', 'desc'); return { diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index 40ba0ceb..4ec57ecc 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -161,6 +161,7 @@ type Connection { verified: Boolean app: App createdAt: String + flowCount: Int } type ConnectionData { diff --git a/packages/backend/src/models/connection.ts b/packages/backend/src/models/connection.ts index c7af9dd6..5a1460eb 100644 --- a/packages/backend/src/models/connection.ts +++ b/packages/backend/src/models/connection.ts @@ -3,6 +3,7 @@ import type { RelationMappings } from 'objection'; import { AES, enc } from 'crypto-js'; import Base from './base'; import User from './user'; +import Step from './step'; import appConfig from '../config/app'; import { IJSONObject } from '@automatisch/types'; import Telemetry from '../helpers/telemetry'; @@ -16,6 +17,7 @@ class Connection extends Base { verified = false; draft: boolean; count?: number; + flowCount?: number; static tableName = 'connections'; @@ -43,6 +45,14 @@ class Connection extends Base { to: 'users.id', }, }, + steps: { + relation: Base.HasManyRelation, + modelClass: Step, + join: { + from: 'connections.id', + to: 'steps.connection_id', + }, + }, }); encryptData(): void {