From 70d59c6c64853cffd860e6e453abd5e8cf2569dd Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 27 Jul 2022 13:54:10 +0300 Subject: [PATCH 1/6] feat: Add draft column to connections --- ...0220727104324_add_draft_column_to_connections.ts | 13 +++++++++++++ .../src/graphql/mutations/verify-connection.ts | 1 + packages/backend/src/graphql/queries/get-app.ts | 1 + packages/backend/src/models/connection.ts | 2 ++ 4 files changed, 17 insertions(+) create mode 100644 packages/backend/src/db/migrations/20220727104324_add_draft_column_to_connections.ts diff --git a/packages/backend/src/db/migrations/20220727104324_add_draft_column_to_connections.ts b/packages/backend/src/db/migrations/20220727104324_add_draft_column_to_connections.ts new file mode 100644 index 00000000..7f425779 --- /dev/null +++ b/packages/backend/src/db/migrations/20220727104324_add_draft_column_to_connections.ts @@ -0,0 +1,13 @@ +import { Knex } from 'knex'; + +export async function up(knex: Knex): Promise { + return knex.schema.table('connections', (table) => { + table.boolean('draft').defaultTo(true); + }); +} + +export async function down(knex: Knex): Promise { + return knex.schema.table('connections', (table) => { + table.dropColumn('draft'); + }); +} diff --git a/packages/backend/src/graphql/mutations/verify-connection.ts b/packages/backend/src/graphql/mutations/verify-connection.ts index 0fca0bd7..a1e4e642 100644 --- a/packages/backend/src/graphql/mutations/verify-connection.ts +++ b/packages/backend/src/graphql/mutations/verify-connection.ts @@ -32,6 +32,7 @@ const verifyConnection = async ( ...verifiedCredentials, }, verified: true, + draft: false, }); return connection; diff --git a/packages/backend/src/graphql/queries/get-app.ts b/packages/backend/src/graphql/queries/get-app.ts index 8cdb7a72..e459319c 100644 --- a/packages/backend/src/graphql/queries/get-app.ts +++ b/packages/backend/src/graphql/queries/get-app.ts @@ -13,6 +13,7 @@ const getApp = async (_parent: unknown, params: Params, context: Context) => { .$relatedQuery('connections') .where({ key: params.key, + draft: false, }) .orderBy('created_at', 'desc'); diff --git a/packages/backend/src/models/connection.ts b/packages/backend/src/models/connection.ts index 2c53c6ee..c7af9dd6 100644 --- a/packages/backend/src/models/connection.ts +++ b/packages/backend/src/models/connection.ts @@ -14,6 +14,7 @@ class Connection extends Base { formattedData?: IJSONObject; userId!: string; verified = false; + draft: boolean; count?: number; static tableName = 'connections'; @@ -29,6 +30,7 @@ class Connection extends Base { formattedData: { type: 'object' }, userId: { type: 'string', format: 'uuid' }, verified: { type: 'boolean' }, + draft: { type: 'boolean' }, }, }; From 58d5847eedf140a353fa0f4947be89141853145d Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Wed, 27 Jul 2022 16:01:19 +0200 Subject: [PATCH 2/6] refactor: remove app field out of createConnection --- .../backend/src/graphql/mutations/create-connection.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/backend/src/graphql/mutations/create-connection.ts b/packages/backend/src/graphql/mutations/create-connection.ts index 6f752f98..940def3d 100644 --- a/packages/backend/src/graphql/mutations/create-connection.ts +++ b/packages/backend/src/graphql/mutations/create-connection.ts @@ -1,4 +1,3 @@ -import App from '../../models/app'; import Context from '../../types/express/context'; import { IJSONObject } from '@automatisch/types'; @@ -13,19 +12,12 @@ const createConnection = async ( params: Params, context: Context ) => { - const app = App.findOneByKey(params.input.key); - - const connection = await context.currentUser + return await context.currentUser .$relatedQuery('connections') .insert({ key: params.input.key, formattedData: params.input.formattedData, }); - - return { - ...connection, - app, - }; }; export default createConnection; From a5367c37707e0ebdcfa73ce601e9b874019437e2 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Wed, 27 Jul 2022 16:01:39 +0200 Subject: [PATCH 3/6] feat: add app field in verifyConnection --- .../backend/src/graphql/mutations/verify-connection.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/graphql/mutations/verify-connection.ts b/packages/backend/src/graphql/mutations/verify-connection.ts index a1e4e642..ee117262 100644 --- a/packages/backend/src/graphql/mutations/verify-connection.ts +++ b/packages/backend/src/graphql/mutations/verify-connection.ts @@ -20,9 +20,9 @@ const verifyConnection = async ( .throwIfNotFound(); const appClass = (await import(`../../apps/${connection.key}`)).default; - const appData = App.findOneByKey(connection.key); + const app = App.findOneByKey(connection.key); - const appInstance = new appClass(appData, connection.formattedData); + const appInstance = new appClass(app, connection.formattedData); const verifiedCredentials = await appInstance.authenticationClient.verifyCredentials(); @@ -35,7 +35,10 @@ const verifyConnection = async ( draft: false, }); - return connection; + return { + ...connection, + app, + }; }; export default verifyConnection; From d513e031386c2617dee83f96a26a83ce294c8cd2 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Wed, 27 Jul 2022 16:02:26 +0200 Subject: [PATCH 4/6] feat: show connection upon verification --- packages/web/src/graphql/cache.ts | 24 +++++++++++++++---- .../graphql/mutations/create-connection.ts | 3 --- .../graphql/mutations/verify-connection.ts | 5 ++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/web/src/graphql/cache.ts b/packages/web/src/graphql/cache.ts index 8bd32ef2..bca0bbb4 100644 --- a/packages/web/src/graphql/cache.ts +++ b/packages/web/src/graphql/cache.ts @@ -1,6 +1,10 @@ import { InMemoryCache } from '@apollo/client'; import offsetLimitPagination from './pagination'; +interface IRef { + __ref: string; +} + const cache = new InMemoryCache({ typePolicies: { App: { @@ -9,9 +13,9 @@ const cache = new InMemoryCache({ Mutation: { mutationType: true, fields: { - createConnection: { - merge(existing, newConnection, { readField, cache }) { - const appKey = readField('key', newConnection); + verifyConnection: { + merge(existing, verifiedConnection, { readField, cache }) { + const appKey = readField('key', verifiedConnection); const appCacheId = cache.identify({ __typename: 'App', key: appKey, @@ -21,12 +25,22 @@ const cache = new InMemoryCache({ id: appCacheId, fields: { connections: (existingConnections) => { - return [...existingConnections, newConnection]; + const existingConnectionIndex = existingConnections.findIndex((connection: IRef) => { + return connection.__ref === verifiedConnection.__ref; + }); + const connectionExists = existingConnectionIndex !== -1; + + // newly created and verified connection + if (!connectionExists) { + return [verifiedConnection, ...existingConnections]; + } + + return existingConnections; } } }); - return newConnection; + return verifiedConnection; } } } diff --git a/packages/web/src/graphql/mutations/create-connection.ts b/packages/web/src/graphql/mutations/create-connection.ts index 9e89b3f6..948cb8d5 100644 --- a/packages/web/src/graphql/mutations/create-connection.ts +++ b/packages/web/src/graphql/mutations/create-connection.ts @@ -11,9 +11,6 @@ export const CREATE_CONNECTION = gql` formattedData { screenName } - app { - key - } } } `; diff --git a/packages/web/src/graphql/mutations/verify-connection.ts b/packages/web/src/graphql/mutations/verify-connection.ts index 7e4a7dbc..0099b9eb 100644 --- a/packages/web/src/graphql/mutations/verify-connection.ts +++ b/packages/web/src/graphql/mutations/verify-connection.ts @@ -4,10 +4,15 @@ export const VERIFY_CONNECTION = gql` mutation VerifyConnection($input: VerifyConnectionInput) { verifyConnection(input: $input) { id + key verified formattedData { screenName } + createdAt + app { + key + } } } `; From 98d7969a1e352836110f62b5e77c1a0521897640 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Wed, 27 Jul 2022 21:11:31 +0200 Subject: [PATCH 5/6] feat: check app existence in createConnection --- packages/backend/src/graphql/mutations/create-connection.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/backend/src/graphql/mutations/create-connection.ts b/packages/backend/src/graphql/mutations/create-connection.ts index 940def3d..8d27177c 100644 --- a/packages/backend/src/graphql/mutations/create-connection.ts +++ b/packages/backend/src/graphql/mutations/create-connection.ts @@ -12,6 +12,8 @@ const createConnection = async ( params: Params, context: Context ) => { + App.findOneByKey(params.input.key); + return await context.currentUser .$relatedQuery('connections') .insert({ From 448a1a49b469218133452998720ef7bf89058a77 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Wed, 27 Jul 2022 23:25:20 +0300 Subject: [PATCH 6/6] fix: Import App model for create connection query --- .../src/graphql/mutations/create-connection.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/backend/src/graphql/mutations/create-connection.ts b/packages/backend/src/graphql/mutations/create-connection.ts index 8d27177c..ac84cd74 100644 --- a/packages/backend/src/graphql/mutations/create-connection.ts +++ b/packages/backend/src/graphql/mutations/create-connection.ts @@ -1,3 +1,4 @@ +import App from '../../models/app'; import Context from '../../types/express/context'; import { IJSONObject } from '@automatisch/types'; @@ -14,12 +15,10 @@ const createConnection = async ( ) => { App.findOneByKey(params.input.key); - return await context.currentUser - .$relatedQuery('connections') - .insert({ - key: params.input.key, - formattedData: params.input.formattedData, - }); + return await context.currentUser.$relatedQuery('connections').insert({ + key: params.input.key, + formattedData: params.input.formattedData, + }); }; export default createConnection;