From bf21ecd1d3da3c6c763d12baa4a7883fe8a62ffa Mon Sep 17 00:00:00 2001 From: ravid Date: Sun, 13 Feb 2022 23:10:14 +0200 Subject: [PATCH] Fixed webhook on backend --- src/resolver/submission/index.ts | 2 ++ .../submission/submission.finish.mutation.ts | 34 +++++++++++++++++++ .../submission/submission.hook.service.ts | 5 +-- .../submission.set.field.service.ts | 33 ++++++++++-------- 4 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 src/resolver/submission/submission.finish.mutation.ts diff --git a/src/resolver/submission/index.ts b/src/resolver/submission/index.ts index eb9790c..483fe0d 100644 --- a/src/resolver/submission/index.ts +++ b/src/resolver/submission/index.ts @@ -7,6 +7,7 @@ import { SubmissionSetFieldMutation } from './submission.set.field.mutation' import { SubmissionStartMutation } from './submission.start.mutation' import { SubmissionStatisticQuery } from './submission.statistic.query' import { SubmissionStatisticResolver } from './submission.statistic.resolver' +import { SubmissionFinishMutation } from './submission.finish.mutation' export const submissionResolvers = [ SubmissionFieldResolver, @@ -15,6 +16,7 @@ export const submissionResolvers = [ SubmissionQuery, SubmissionResolver, SubmissionSetFieldMutation, + SubmissionFinishMutation, SubmissionStartMutation, SubmissionStatisticQuery, SubmissionStatisticResolver, diff --git a/src/resolver/submission/submission.finish.mutation.ts b/src/resolver/submission/submission.finish.mutation.ts new file mode 100644 index 0000000..c4e5db2 --- /dev/null +++ b/src/resolver/submission/submission.finish.mutation.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@nestjs/common' +import { Args, Context, ID, Mutation } from '@nestjs/graphql' +import { User } from '../../decorator/user.decorator' +import { SubmissionProgressModel } from '../../dto/submission/submission.progress.model' +import { SubmissionSetFieldInput } from '../../dto/submission/submission.set.field.input' +import { SubmissionEntity } from '../../entity/submission.entity' +import { UserEntity } from '../../entity/user.entity' +import { SubmissionService } from '../../service/submission/submission.service' +import { SubmissionSetFieldService } from '../../service/submission/submission.set.field.service' +import { ContextCache } from '../context.cache' + +@Injectable() +export class SubmissionFinishMutation { + constructor( + private readonly submissionService: SubmissionService, + private readonly setFieldService: SubmissionSetFieldService, + ) { + } + + @Mutation(() => SubmissionProgressModel) + async submissionFinish( + @User() user: UserEntity, + @Args({ name: 'submission', type: () => ID }) id: string, + @Context('cache') cache: ContextCache, + ): Promise { + const submission = await this.submissionService.findById(id) + + await this.setFieldService.finishSubmission(submission) + + cache.add(cache.getCacheKey(SubmissionEntity.name, submission.id), submission) + + return new SubmissionProgressModel(submission) + } +} diff --git a/src/service/submission/submission.hook.service.ts b/src/service/submission/submission.hook.service.ts index e3dcd8f..f714a5c 100644 --- a/src/service/submission/submission.hook.service.ts +++ b/src/service/submission/submission.hook.service.ts @@ -59,8 +59,9 @@ export class SubmissionHookService { return { field: submissionField.field.id, slug: submissionField.field.slug || null, - value: submissionField.field.value, - } + default_value: submissionField.field.value, + content: submissionField.content, + } }), } diff --git a/src/service/submission/submission.set.field.service.ts b/src/service/submission/submission.set.field.service.ts index 13d9694..a9a1a26 100644 --- a/src/service/submission/submission.set.field.service.ts +++ b/src/service/submission/submission.set.field.service.ts @@ -51,23 +51,28 @@ export class SubmissionSetFieldService { } if (submission.percentageComplete === 1) { - this.webHook.process(submission).catch(e => { - this.logger.error({ - submission: submission.id, - form: submission.formId, - error: serializeError(e), - }, 'failed to send webhooks') - }) - this.notifications.process(submission).catch(e => { - this.logger.error({ - submission: submission.id, - form: submission.formId, - error: serializeError(e), - }, 'failed to send notifications') - }) + this.finishSubmission(submission) } } + async finishSubmission(submission: SubmissionEntity) { + submission.percentageComplete = 1 + this.webHook.process(submission).catch(e => { + this.logger.error({ + submission: submission.id, + form: submission.formId, + error: serializeError(e), + }, 'failed to send webhooks') + }) + this.notifications.process(submission).catch(e => { + this.logger.error({ + submission: submission.id, + form: submission.formId, + error: serializeError(e), + }, 'failed to send notifications') + }) + } + private parseData( field: SubmissionFieldEntity, data: string