@@ -18,13 +18,24 @@ import {
1818 DatabaseTemplate ,
1919 UserWithOptionalClient ,
2020 User ,
21+ $LetterTemplate ,
2122} from 'nhs-notify-web-template-management-utils' ;
2223import { Logger } from 'nhs-notify-web-template-management-utils/logger' ;
2324import { LetterUploadRepository } from '../infra/letter-upload-repository' ;
2425import { ProofingQueue } from '../infra/proofing-queue' ;
2526import { ClientConfigRepository } from '../infra/client-config-repository' ;
27+ import z from 'zod' ;
2628
2729export 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