Skip to content

Commit f7ab471

Browse files
committed
requestProof refactor, pr comments
1 parent e306db6 commit f7ab471

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

lambdas/backend-api/src/__tests__/templates/app/template-client.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1618,7 +1618,7 @@ describe('templateClient', () => {
16181618
});
16191619
});
16201620

1621-
test('should return a failure result, when updated database template is invalid', async () => {
1621+
test('should return a failure result, when updated database template is not suitable for proofing', async () => {
16221622
const { templateClient, mocks } = setup();
16231623

16241624
const expectedTemplateDto: TemplateDto = {

lambdas/backend-api/src/templates/app/template-client.ts

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,24 @@ import {
1818
DatabaseTemplate,
1919
UserWithOptionalClient,
2020
User,
21+
$LetterTemplate,
2122
} from 'nhs-notify-web-template-management-utils';
2223
import { Logger } from 'nhs-notify-web-template-management-utils/logger';
2324
import { LetterUploadRepository } from '../infra/letter-upload-repository';
2425
import { ProofingQueue } from '../infra/proofing-queue';
2526
import { ClientConfigRepository } from '../infra/client-config-repository';
27+
import z from 'zod';
2628

2729
export class TemplateClient {
30+
private $LetterForProofing = z.intersection(
31+
$LetterTemplate,
32+
z.object({
33+
templateType: z.literal('LETTER'),
34+
personalisationParameters: z.array(z.string()),
35+
campaignId: z.string(),
36+
})
37+
);
38+
2839
constructor(
2940
private readonly templateRepository: TemplateRepository,
3041
private readonly letterUploadRepository: LetterUploadRepository,
@@ -396,32 +407,32 @@ export class TemplateClient {
396407
return proofRequestUpdateResult;
397408
}
398409

399-
const templateDTO = this.mapDatabaseObjectToDTO(
410+
const proofLetterValidationResult = this.$LetterForProofing.safeParse(
400411
proofRequestUpdateResult.data
401412
);
402413

403-
if (
404-
!templateDTO ||
405-
templateDTO.templateType !== 'LETTER' ||
406-
!templateDTO.personalisationParameters ||
407-
!templateDTO.campaignId
408-
) {
409-
log.error({
410-
code: ErrorCase.INTERNAL,
411-
description: 'Malformed template',
412-
template: templateDTO,
413-
});
414+
if (proofLetterValidationResult.error) {
415+
log
416+
.child({
417+
code: ErrorCase.INTERNAL,
418+
template: proofRequestUpdateResult.data,
419+
})
420+
.error('Malformed template', proofLetterValidationResult.error);
414421

415422
return failure(ErrorCase.INTERNAL, 'Malformed template');
416423
}
417424

418-
const pdfVersionId = templateDTO.files.pdfTemplate.currentVersion;
419-
const testDataVersionId = templateDTO.files.testDataCsv?.currentVersion;
420-
const personalisationParameters = templateDTO.personalisationParameters;
421-
const letterType = templateDTO.letterType;
422-
const language = templateDTO.language;
423-
const name = templateDTO.name;
424-
const templateCampaignId = templateDTO.campaignId;
425+
const {
426+
campaignId: templateCampaignId,
427+
files: {
428+
pdfTemplate: { currentVersion: pdfVersionId },
429+
testDataCsv: { currentVersion: testDataVersionId } = {},
430+
},
431+
language,
432+
letterType,
433+
name,
434+
personalisationParameters,
435+
} = proofLetterValidationResult.data;
425436

426437
const sendQueueResult = await this.proofingQueue.send(
427438
templateId,
@@ -448,7 +459,7 @@ export class TemplateClient {
448459
return sendQueueResult;
449460
}
450461

451-
return success(templateDTO);
462+
return success(proofLetterValidationResult.data);
452463
}
453464

454465
private async updateTemplateStatus(

0 commit comments

Comments
 (0)