import { Context, Parent, ResolveField, Resolver } from '@nestjs/graphql' import { FormFieldModel } from '../../dto/form/form.field.model' import { SubmissionFieldModel } from '../../dto/submission/submission.field.model' import { FormFieldEntity } from '../../entity/form.field.entity' import { SubmissionFieldEntity } from '../../entity/submission.field.entity' import { FormFieldService } from '../../service/form/form.field.service' import { IdService } from '../../service/id.service' import { ContextCache } from '../context.cache' @Resolver(() => SubmissionFieldModel) export class SubmissionFieldResolver { constructor( private readonly formFieldService: FormFieldService, private readonly idService: IdService, ) { } @ResolveField(() => FormFieldModel, { nullable: true }) async field( @Parent() parent: SubmissionFieldModel, @Context('cache') cache: ContextCache, ): Promise<FormFieldModel> { const submissionField = await cache.get<SubmissionFieldEntity>( cache.getCacheKey(SubmissionFieldEntity.name, parent._id) ) const field = await cache.get<FormFieldEntity>( cache.getCacheKey( FormFieldEntity.name, submissionField.fieldId), () => this.formFieldService.findById(submissionField.fieldId, submissionField.field) ) if (!field) { return null } return new FormFieldModel( this.idService.encode(field.id), field, ) } }