Merge pull request #366 from automatisch/feature/connection-draft-column

feat: Add draft column to connections
This commit is contained in:
Ömer Faruk Aydın
2022-07-27 23:28:44 +03:00
committed by GitHub
8 changed files with 52 additions and 23 deletions

View File

@@ -0,0 +1,13 @@
import { Knex } from 'knex';
export async function up(knex: Knex): Promise<void> {
return knex.schema.table('connections', (table) => {
table.boolean('draft').defaultTo(true);
});
}
export async function down(knex: Knex): Promise<void> {
return knex.schema.table('connections', (table) => {
table.dropColumn('draft');
});
}

View File

@@ -13,19 +13,12 @@ const createConnection = async (
params: Params, params: Params,
context: Context context: Context
) => { ) => {
const app = App.findOneByKey(params.input.key); App.findOneByKey(params.input.key);
const connection = await context.currentUser return await context.currentUser.$relatedQuery('connections').insert({
.$relatedQuery('connections')
.insert({
key: params.input.key, key: params.input.key,
formattedData: params.input.formattedData, formattedData: params.input.formattedData,
}); });
return {
...connection,
app,
};
}; };
export default createConnection; export default createConnection;

View File

@@ -20,9 +20,9 @@ const verifyConnection = async (
.throwIfNotFound(); .throwIfNotFound();
const appClass = (await import(`../../apps/${connection.key}`)).default; 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 = const verifiedCredentials =
await appInstance.authenticationClient.verifyCredentials(); await appInstance.authenticationClient.verifyCredentials();
@@ -32,9 +32,13 @@ const verifyConnection = async (
...verifiedCredentials, ...verifiedCredentials,
}, },
verified: true, verified: true,
draft: false,
}); });
return connection; return {
...connection,
app,
};
}; };
export default verifyConnection; export default verifyConnection;

View File

@@ -13,6 +13,7 @@ const getApp = async (_parent: unknown, params: Params, context: Context) => {
.$relatedQuery('connections') .$relatedQuery('connections')
.where({ .where({
key: params.key, key: params.key,
draft: false,
}) })
.orderBy('created_at', 'desc'); .orderBy('created_at', 'desc');

View File

@@ -14,6 +14,7 @@ class Connection extends Base {
formattedData?: IJSONObject; formattedData?: IJSONObject;
userId!: string; userId!: string;
verified = false; verified = false;
draft: boolean;
count?: number; count?: number;
static tableName = 'connections'; static tableName = 'connections';
@@ -29,6 +30,7 @@ class Connection extends Base {
formattedData: { type: 'object' }, formattedData: { type: 'object' },
userId: { type: 'string', format: 'uuid' }, userId: { type: 'string', format: 'uuid' },
verified: { type: 'boolean' }, verified: { type: 'boolean' },
draft: { type: 'boolean' },
}, },
}; };

View File

@@ -1,6 +1,10 @@
import { InMemoryCache } from '@apollo/client'; import { InMemoryCache } from '@apollo/client';
import offsetLimitPagination from './pagination'; import offsetLimitPagination from './pagination';
interface IRef {
__ref: string;
}
const cache = new InMemoryCache({ const cache = new InMemoryCache({
typePolicies: { typePolicies: {
App: { App: {
@@ -9,9 +13,9 @@ const cache = new InMemoryCache({
Mutation: { Mutation: {
mutationType: true, mutationType: true,
fields: { fields: {
createConnection: { verifyConnection: {
merge(existing, newConnection, { readField, cache }) { merge(existing, verifiedConnection, { readField, cache }) {
const appKey = readField('key', newConnection); const appKey = readField('key', verifiedConnection);
const appCacheId = cache.identify({ const appCacheId = cache.identify({
__typename: 'App', __typename: 'App',
key: appKey, key: appKey,
@@ -21,12 +25,22 @@ const cache = new InMemoryCache({
id: appCacheId, id: appCacheId,
fields: { fields: {
connections: (existingConnections) => { 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;
} }
} }
} }

View File

@@ -11,9 +11,6 @@ export const CREATE_CONNECTION = gql`
formattedData { formattedData {
screenName screenName
} }
app {
key
}
} }
} }
`; `;

View File

@@ -4,10 +4,15 @@ export const VERIFY_CONNECTION = gql`
mutation VerifyConnection($input: VerifyConnectionInput) { mutation VerifyConnection($input: VerifyConnectionInput) {
verifyConnection(input: $input) { verifyConnection(input: $input) {
id id
key
verified verified
formattedData { formattedData {
screenName screenName
} }
createdAt
app {
key
}
} }
} }
`; `;