fix saving of submission id

This commit is contained in:
Michael Schramm 2022-01-03 00:36:16 +01:00
parent 8e87ca5eed
commit 6c0181c09d
4 changed files with 23 additions and 18 deletions

View File

@ -2,6 +2,13 @@ import { createParamDecorator, ExecutionContext } from '@nestjs/common'
import { GqlExecutionContext } from '@nestjs/graphql' import { GqlExecutionContext } from '@nestjs/graphql'
export const User = createParamDecorator( export const User = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => (data: unknown, ctx: ExecutionContext) => {
GqlExecutionContext.create(ctx).getContext().req.user, const user = GqlExecutionContext.create(ctx).getContext().req.user
if (!user) {
return null
}
return user
},
); );

View File

@ -28,6 +28,12 @@ export class SubmissionStartMutation {
): Promise<SubmissionProgressModel> { ): Promise<SubmissionProgressModel> {
const form = await this.formService.findById(id) 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) const submission = await this.startService.start(form, input, user, ipAddr)
cache.add(cache.getCacheKey(SubmissionEntity.name, submission.id), submission) cache.add(cache.getCacheKey(SubmissionEntity.name, submission.id), submission)

View File

@ -43,15 +43,7 @@ export class SubmissionService {
} }
async findById(id: string): Promise<SubmissionEntity> { async findById(id: string): Promise<SubmissionEntity> {
const submission = await this.submissionRepository.findOne( const submission = await this.submissionRepository.findOne(id);
id,
{
relations: [
'form',
'form.admin',
],
}
);
if (!submission) { if (!submission) {
throw new Error('no form found') throw new Error('no form found')

View File

@ -27,9 +27,12 @@ export class SubmissionSetFieldService {
async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise<void> { async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise<void> {
let field = submission.fields.find(field => field.field.id.toString() === input.field) let field = submission.fields.find(field => field.field.id.toString() === input.field)
submission.timeElapsed = dayjs().diff(dayjs(submission.created), 'second')
if (field) { if (field) {
field.content = this.parseData(field, input.data) field.content = this.parseData(field, input.data)
await this.submissionRepository.save(submission)
await this.submissionFieldRepository.save(field) await this.submissionFieldRepository.save(field)
} else { } else {
field = new SubmissionFieldEntity() field = new SubmissionFieldEntity()
@ -39,17 +42,14 @@ export class SubmissionSetFieldService {
field.type = field.field.type field.type = field.field.type
field.content = this.parseData(field, input.data) field.content = this.parseData(field, input.data)
field = await this.submissionFieldRepository.save(field)
submission.fields.push(field) submission.fields.push(field)
submission.percentageComplete = (submission.fields.length) / submission.form.fields.length 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) { if (submission.percentageComplete === 1) {
this.webHook.process(submission).catch(e => { this.webHook.process(submission).catch(e => {
this.logger.error({ this.logger.error({