From 3457ad29d7f7ad40c55c54b63bebdfeae74fd8b2 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 18 Feb 2022 12:40:01 +0300 Subject: [PATCH] feat: Use active field with flows --- .../src/graphql/mutations/update-flow.ts | 4 ++- packages/backend/src/models/flow.ts | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/graphql/mutations/update-flow.ts b/packages/backend/src/graphql/mutations/update-flow.ts index 7eb09493..aa1698ae 100644 --- a/packages/backend/src/graphql/mutations/update-flow.ts +++ b/packages/backend/src/graphql/mutations/update-flow.ts @@ -1,10 +1,11 @@ -import { GraphQLString, GraphQLNonNull } from 'graphql'; +import { GraphQLString, GraphQLNonNull, GraphQLBoolean } from 'graphql'; import flowType from '../types/flow'; import RequestWithCurrentUser from '../../types/express/request-with-current-user'; type Params = { id: string; name: string; + active: boolean; }; const updateFlowResolver = async ( @@ -31,6 +32,7 @@ const updateFlow = { args: { id: { type: GraphQLNonNull(GraphQLString) }, name: { type: GraphQLNonNull(GraphQLString) }, + active: { type: GraphQLBoolean }, }, resolve: (_: any, params: Params, req: RequestWithCurrentUser) => updateFlowResolver(params, req), diff --git a/packages/backend/src/models/flow.ts b/packages/backend/src/models/flow.ts index de6891c1..8af98b35 100644 --- a/packages/backend/src/models/flow.ts +++ b/packages/backend/src/models/flow.ts @@ -1,3 +1,4 @@ +import { ModelOptions, QueryContext, ValidationError } from 'objection'; import Base from './base'; import Step from './step'; @@ -31,6 +32,33 @@ class Flow extends Base { }, }, }); + + async $beforeUpdate(): Promise { + if (!this.active) return; + + const incompleteStep = await this.$relatedQuery('steps').findOne({ + status: 'incomplete', + }); + + if (incompleteStep) { + throw new ValidationError({ + message: 'All steps should be completed before updating flow status!', + type: 'incompleteStepsError', + }); + } + + const allSteps = await this.$relatedQuery('steps'); + + if (allSteps.length < 2) { + throw new ValidationError({ + message: + 'There should be at least one trigger and one action steps in the flow!', + type: 'insufficientStepsError', + }); + } + + return; + } } export default Flow;