69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
import App from '../../models/app.js';
|
|
import Step from '../../models/step.js';
|
|
import Connection from '../../models/connection.js';
|
|
|
|
const updateStep = async (_parent, params, context) => {
|
|
const { isCreator } = context.currentUser.can('update', 'Flow');
|
|
const userSteps = context.currentUser.$relatedQuery('steps');
|
|
const allSteps = Step.query();
|
|
const baseQuery = isCreator ? userSteps : allSteps;
|
|
|
|
const { input } = params;
|
|
|
|
let step = await baseQuery
|
|
.findOne({
|
|
'steps.id': input.id,
|
|
flow_id: input.flow.id,
|
|
})
|
|
.throwIfNotFound();
|
|
|
|
if (input.connection.id) {
|
|
let canSeeAllConnections = false;
|
|
try {
|
|
const conditions = context.currentUser.can('read', 'Connection');
|
|
|
|
canSeeAllConnections = !conditions.isCreator;
|
|
} catch {
|
|
// void
|
|
}
|
|
|
|
const userConnections = context.currentUser.$relatedQuery('connections');
|
|
const allConnections = Connection.query();
|
|
const baseConnectionsQuery = canSeeAllConnections
|
|
? allConnections
|
|
: userConnections;
|
|
|
|
const connection = await baseConnectionsQuery
|
|
.clone()
|
|
.findById(input.connection?.id);
|
|
|
|
if (!connection) {
|
|
throw new Error('The connection does not exist!');
|
|
}
|
|
}
|
|
|
|
if (step.isTrigger) {
|
|
await App.checkAppAndTrigger(input.appKey, input.key);
|
|
}
|
|
|
|
if (step.isAction) {
|
|
await App.checkAppAndAction(input.appKey, input.key);
|
|
}
|
|
|
|
step = await Step.query()
|
|
.patchAndFetchById(input.id, {
|
|
key: input.key,
|
|
appKey: input.appKey,
|
|
connectionId: input.connection.id,
|
|
parameters: input.parameters,
|
|
status: 'incomplete'
|
|
})
|
|
.withGraphFetched('connection');
|
|
|
|
await step.updateWebhookUrl();
|
|
|
|
return step;
|
|
};
|
|
|
|
export default updateStep;
|