Skip to content

Commit 4639e25

Browse files
committed
init
1 parent ee7bb53 commit 4639e25

File tree

3 files changed

+46
-18
lines changed

3 files changed

+46
-18
lines changed

lambdas/event-publisher/src/domain/event-builder.ts

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,31 @@ export class EventBuilder {
5555
private buildTemplateDatabaseEvent(
5656
publishableEventRecord: PublishableEventRecord
5757
): Event | undefined {
58-
if (!publishableEventRecord.dynamodb.NewImage) {
58+
if (
59+
!publishableEventRecord.dynamodb.NewImage ||
60+
!publishableEventRecord.dynamodb.OldImage
61+
) {
5962
// if this is a hard delete do not publish an event - we will publish events
6063
// when the status is set to deleted
6164
this.logger.debug({
62-
description: 'No new image found',
65+
description: 'Old image or new image is not present',
6366
publishableEventRecord,
6467
});
6568

6669
return undefined;
6770
}
6871

69-
const dynamoRecord = unmarshall(publishableEventRecord.dynamodb.NewImage);
72+
const dynamoRecordNew = unmarshall(
73+
publishableEventRecord.dynamodb.NewImage
74+
);
75+
const dynamoRecordOld = unmarshall(
76+
publishableEventRecord.dynamodb.OldImage
77+
);
7078

71-
const databaseTemplate = $DynamoDBTemplate.parse(dynamoRecord);
79+
const databaseTemplateNew = $DynamoDBTemplate.parse(dynamoRecordNew);
80+
const databaseTemplateOld = $DynamoDBTemplate.parse(dynamoRecordOld);
7281

73-
if (!shouldPublish(databaseTemplate)) {
82+
if (!shouldPublish(databaseTemplateNew, databaseTemplateOld)) {
7483
this.logger.debug({
7584
description: 'Not publishing event',
7685
publishableEventRecord,
@@ -79,14 +88,24 @@ export class EventBuilder {
7988
return undefined;
8089
}
8190

82-
return $Event.parse({
83-
...this.buildTemplateSavedEventMetadata(
84-
publishableEventRecord.eventID,
85-
databaseTemplate.templateStatus,
86-
databaseTemplate.id
87-
),
88-
data: dynamoRecord,
89-
});
91+
try {
92+
return $Event.parse({
93+
...this.buildTemplateSavedEventMetadata(
94+
publishableEventRecord.eventID,
95+
databaseTemplateNew.templateStatus,
96+
databaseTemplateNew.id
97+
),
98+
data: dynamoRecordNew,
99+
});
100+
} catch (error) {
101+
this.logger
102+
.child({
103+
description: 'Failed to parse outgoing event',
104+
publishableEventRecord,
105+
})
106+
.error(error);
107+
throw error;
108+
}
90109
}
91110

92111
buildEvent(

lambdas/event-publisher/src/domain/input-schemas.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const $DynamoDBStreamRecord = z.object({
2626
eventID: z.string(),
2727
dynamodb: z.object({
2828
NewImage: z.record(z.string(), $AttributeValue).optional(),
29+
OldImage: z.record(z.string(), $AttributeValue).optional(),
2930
SequenceNumber: z.string().optional(),
3031
}),
3132
tableName: z.string(),

lambdas/event-publisher/src/domain/should-publish.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,23 @@ const publishableLetterStatuses = new Set<DynamoDBTemplate['templateStatus']>([
88
'WAITING_FOR_PROOF',
99
]);
1010

11-
function shouldPublishLetter(data: DynamoDBTemplate): boolean {
11+
function shouldPublishLetter(
12+
current: DynamoDBTemplate,
13+
previous: DynamoDBTemplate
14+
): boolean {
1215
return (
13-
publishableLetterStatuses.has(data.templateStatus) && !!data.proofingEnabled
16+
publishableLetterStatuses.has(current.templateStatus) &&
17+
publishableLetterStatuses.has(previous.templateStatus) &&
18+
!!current.proofingEnabled
1419
);
1520
}
1621

17-
export function shouldPublish(data: DynamoDBTemplate) {
18-
if (data.templateType === 'LETTER') {
19-
return shouldPublishLetter(data);
22+
export function shouldPublish(
23+
current: DynamoDBTemplate,
24+
previous: DynamoDBTemplate
25+
) {
26+
if (current.templateType === 'LETTER') {
27+
return shouldPublishLetter(current, previous);
2028
}
2129

2230
return true;

0 commit comments

Comments
 (0)