Files
automatisch/packages/backend/src/graphql/mutations/delete-step.ts
2022-02-28 01:26:57 +03:00

53 lines
1.2 KiB
TypeScript

import { GraphQLString, GraphQLNonNull } from 'graphql';
import RequestWithCurrentUser from '../../types/express/request-with-current-user';
import stepType from '../types/step';
type Params = {
id: string;
};
const deleteStepResolver = async (
params: Params,
req: RequestWithCurrentUser
) => {
const step = await req.currentUser
.$relatedQuery('steps')
.withGraphFetched('flow')
.findOne({
'steps.id': params.id,
})
.throwIfNotFound();
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({
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: stepType,
args: {
id: { type: GraphQLNonNull(GraphQLString) },
},
resolve: (_: any, params: Params, req: RequestWithCurrentUser) =>
deleteStepResolver(params, req),
};
export default deleteStep;