feat: Adjust positions and return all steps after deletion of the step

This commit is contained in:
Faruk AYDIN
2022-01-30 14:38:14 +03:00
committed by Ali BARIN
parent 3e5b9478c7
commit 0b6eecd41d
5 changed files with 65 additions and 34 deletions

View File

@@ -1,6 +1,6 @@
import { GraphQLString, GraphQLNonNull, GraphQLBoolean } from 'graphql';
import Step from '../../models/step';
import { GraphQLString, GraphQLNonNull } from 'graphql';
import RequestWithCurrentUser from '../../types/express/request-with-current-user';
import stepType from '../types/step';
type Params = {
id: string;
@@ -10,19 +10,39 @@ const deleteStepResolver = async (
params: Params,
req: RequestWithCurrentUser
) => {
await req.currentUser
const step = await req.currentUser
.$relatedQuery('steps')
.delete()
.withGraphFetched('flow')
.findOne({
id: params.id,
'steps.id': params.id,
})
.throwIfNotFound();
return;
await step.$query().delete();
const nextSteps = await step.flow
.$relatedQuery('steps')
.where('position', '>', step.position);
const nextStepQueries = nextSteps.map(async (nextStep) => {
await nextStep.$query().patch({
...nextStep,
position: nextStep.position - 1,
});
});
await Promise.all(nextStepQueries);
step.flow = await step.flow
.$query()
.withGraphJoined('steps')
.orderBy('steps.position', 'asc');
return step;
};
const deleteStep = {
type: GraphQLBoolean,
type: stepType,
args: {
id: { type: GraphQLNonNull(GraphQLString) },
},

View File

@@ -16,8 +16,8 @@ const rootQuery = new GraphQLObjectType({
getAppConnections,
testConnection,
getFlow,
getFlows
}
getFlows,
},
});
export default rootQuery;

View File

@@ -5,17 +5,21 @@ import {
GraphQLString,
GraphQLBoolean,
} from 'graphql';
import StepType from './step';
const flowType = new GraphQLObjectType({
name: 'Flow',
fields: {
id: { type: GraphQLString },
name: { type: GraphQLString },
active: { type: GraphQLBoolean },
steps: {
type: GraphQLList(StepType),
},
fields: () => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const StepType = require('./step').default;
return {
id: { type: GraphQLString },
name: { type: GraphQLString },
active: { type: GraphQLBoolean },
steps: {
type: GraphQLList(StepType),
},
};
},
});

View File

@@ -9,23 +9,29 @@ import ConnectionType from './connection';
const stepType = new GraphQLObjectType({
name: 'Step',
fields: {
id: { type: GraphQLString },
previousStepId: { type: GraphQLString },
key: { type: GraphQLString },
appKey: { type: GraphQLString },
type: {
type: new GraphQLEnumType({
name: 'StepEnumType',
values: {
trigger: { value: 'trigger' },
action: { value: 'action' },
},
}),
},
parameters: { type: GraphQLString },
connection: { type: ConnectionType },
position: { type: GraphQLInt },
fields: () => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const FlowType = require('./flow').default;
return {
id: { type: GraphQLString },
previousStepId: { type: GraphQLString },
key: { type: GraphQLString },
appKey: { type: GraphQLString },
type: {
type: new GraphQLEnumType({
name: 'StepEnumType',
values: {
trigger: { value: 'trigger' },
action: { value: 'action' },
},
}),
},
parameters: { type: GraphQLString },
connection: { type: ConnectionType },
flow: { type: FlowType },
position: { type: GraphQLInt },
};
},
});

View File

@@ -17,6 +17,7 @@ class Step extends Base {
position: number;
parameters: string;
connection?: Connection;
flow?: Flow;
static tableName = 'steps';