Fixed webhook on backend

This commit is contained in:
ravid 2022-02-13 23:10:14 +02:00
parent 21d0a3257b
commit bf21ecd1d3
4 changed files with 58 additions and 16 deletions

View File

@ -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,

View File

@ -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<SubmissionProgressModel> {
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)
}
}

View File

@ -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,
}
}),
}

View File

@ -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