From 6c0181c09dff9af786195c811b8bf57063f8223e Mon Sep 17 00:00:00 2001 From: Michael Schramm Date: Mon, 3 Jan 2022 00:36:16 +0100 Subject: [PATCH] fix saving of submission id --- src/decorator/user.decorator.ts | 11 +++++++++-- .../submission/submission.start.mutation.ts | 6 ++++++ src/service/submission/submission.service.ts | 10 +--------- .../submission/submission.set.field.service.ts | 14 +++++++------- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/decorator/user.decorator.ts b/src/decorator/user.decorator.ts index f42c384..c94a6fe 100644 --- a/src/decorator/user.decorator.ts +++ b/src/decorator/user.decorator.ts @@ -2,6 +2,13 @@ import { createParamDecorator, ExecutionContext } from '@nestjs/common' import { GqlExecutionContext } from '@nestjs/graphql' export const User = createParamDecorator( - (data: unknown, ctx: ExecutionContext) => - GqlExecutionContext.create(ctx).getContext().req.user, + (data: unknown, ctx: ExecutionContext) => { + const user = GqlExecutionContext.create(ctx).getContext().req.user + + if (!user) { + return null + } + + return user + }, ); diff --git a/src/resolver/submission/submission.start.mutation.ts b/src/resolver/submission/submission.start.mutation.ts index d4bd6dd..b8ac966 100644 --- a/src/resolver/submission/submission.start.mutation.ts +++ b/src/resolver/submission/submission.start.mutation.ts @@ -28,6 +28,12 @@ export class SubmissionStartMutation { ): Promise { const form = await this.formService.findById(id) + if (!form.isLive && !this.formService.isAdmin(form, user)) { + throw new Error('invalid form') + } + + console.log('user', user) + const submission = await this.startService.start(form, input, user, ipAddr) cache.add(cache.getCacheKey(SubmissionEntity.name, submission.id), submission) diff --git a/src/service/submission/submission.service.ts b/src/service/submission/submission.service.ts index b763108..ba3ac1e 100644 --- a/src/service/submission/submission.service.ts +++ b/src/service/submission/submission.service.ts @@ -43,15 +43,7 @@ export class SubmissionService { } async findById(id: string): Promise { - const submission = await this.submissionRepository.findOne( - id, - { - relations: [ - 'form', - 'form.admin', - ], - } - ); + const submission = await this.submissionRepository.findOne(id); if (!submission) { throw new Error('no form found') diff --git a/src/service/submission/submission.set.field.service.ts b/src/service/submission/submission.set.field.service.ts index 10f1f2d..7680d9f 100644 --- a/src/service/submission/submission.set.field.service.ts +++ b/src/service/submission/submission.set.field.service.ts @@ -27,9 +27,12 @@ export class SubmissionSetFieldService { async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise { let field = submission.fields.find(field => field.field.id.toString() === input.field) + submission.timeElapsed = dayjs().diff(dayjs(submission.created), 'second') + if (field) { field.content = this.parseData(field, input.data) + await this.submissionRepository.save(submission) await this.submissionFieldRepository.save(field) } else { field = new SubmissionFieldEntity() @@ -39,17 +42,14 @@ export class SubmissionSetFieldService { field.type = field.field.type field.content = this.parseData(field, input.data) - field = await this.submissionFieldRepository.save(field) - submission.fields.push(field) - submission.percentageComplete = (submission.fields.length) / submission.form.fields.length + + // figure out why this cannot be after field save... + await this.submissionRepository.save(submission) + await this.submissionFieldRepository.save(field) } - submission.timeElapsed = dayjs().diff(dayjs(submission.created), 'second') - - await this.submissionRepository.save(submission) - if (submission.percentageComplete === 1) { this.webHook.process(submission).catch(e => { this.logger.error({