feat: Implement draft version of Step model

This commit is contained in:
Faruk AYDIN
2021-11-06 23:38:37 +01:00
committed by Ömer Faruk Aydın
parent a3dd76df21
commit c48c905805
5 changed files with 118 additions and 1 deletions

View File

@@ -0,0 +1,18 @@
import { Knex } from "knex";
export async function up(knex: Knex): Promise<void> {
return knex.schema.createTable('steps', (table) => {
table.increments('id');
table.string('key').notNullable();
table.string('app_key').notNullable();
table.string('type').notNullable();
table.integer('connection_id').references('id').inTable('connections');
table.text('parameters')
table.timestamps(true, true);
});
};
export async function down(knex: Knex): Promise<void> {
return knex.schema.dropTable('steps');
}

View File

@@ -0,0 +1,43 @@
import { GraphQLString, GraphQLNonNull, GraphQLInt, GraphQLEnumType } from 'graphql';
import Step from '../../models/step';
import stepType from '../types/step';
import RequestWithCurrentUser from '../../types/express/request-with-current-user';
type Params = {
key: string,
appKey: string,
type: string
connectionId: number
}
const createStepResolver = async (params: Params, req: RequestWithCurrentUser) => {
const step = await Step.query().insertAndFetch({
key: params.key,
appKey: params.appKey,
type: params.type,
connectionId: params.connectionId,
});
return step;
}
const createStep = {
type: stepType,
args: {
key: { type: GraphQLNonNull(GraphQLString) },
appKey: { type: GraphQLNonNull(GraphQLString) },
type: {
type: new GraphQLEnumType({
name: 'StepInputEnumType',
values: {
trigger: { value: 'trigger' },
action: { value: 'action' },
}
})
},
connectionId: { type: GraphQLNonNull(GraphQLInt) }
},
resolve: (_: any, params: Params, req: RequestWithCurrentUser) => createStepResolver(params, req)
};
export default createStep;

View File

@@ -5,6 +5,7 @@ import updateConnection from './mutations/update-connection';
import resetConnection from './mutations/reset-connection';
import verifyConnection from './mutations/verify-connection';
import deleteConnection from './mutations/delete-connection';
import createStep from './mutations/create-step';
const rootMutation = new GraphQLObjectType({
name: 'Mutation',
@@ -14,7 +15,8 @@ const rootMutation = new GraphQLObjectType({
updateConnection,
resetConnection,
verifyConnection,
deleteConnection
deleteConnection,
createStep,
}
});

View File

@@ -0,0 +1,21 @@
import { GraphQLObjectType, GraphQLString, GraphQLNonNull, GraphQLEnumType, GraphQLInt } from 'graphql';
const stepType = new GraphQLObjectType({
name: 'Step',
fields: {
key: { type: GraphQLNonNull(GraphQLString) },
appKey: { type: GraphQLNonNull(GraphQLString) },
type: {
type: new GraphQLEnumType({
name: 'StepEnumType',
values: {
trigger: { value: 'trigger' },
action: { value: 'action' },
}
})
},
connectionId: { type: GraphQLNonNull(GraphQLInt) }
}
})
export default stepType;

View File

@@ -0,0 +1,33 @@
import Base from './base'
enum StepEnumType {
'trigger',
'action',
}
class Step extends Base {
id!: number
key!: string
appKey!: string
type!: StepEnumType
connectionId!: number
parameters: any
static tableName = 'steps';
static jsonSchema = {
type: 'object',
required: ['key', 'appKey', 'type', 'connectionId'],
properties: {
id: { type: 'integer' },
key: { type: 'string', minLength: 1, maxLength: 255 },
appKey: { type: 'string', minLength: 1, maxLength: 255 },
type: { type: "string", enum: ["action", "trigger"] },
connectionId: { type: 'integer' },
parameters: { type: 'object' },
}
}
}
export default Step;