Skip to content

Commit 471612f

Browse files
CCM-15677: Change PK in TTL table
1 parent 4474f70 commit 471612f

7 files changed

Lines changed: 36 additions & 20 deletions

File tree

lambdas/ttl-create-lambda/src/__tests__/infra/ttl-repository.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('TtlRepository', () => {
6363
expect(putCommand.input).toStrictEqual({
6464
TableName: tableName,
6565
Item: {
66-
PK: messageDownloadedEvent.data.messageUri,
66+
PK: `${messageDownloadedEvent.data.senderId}_${messageDownloadedEvent.data.messageReference}`,
6767
SK: 'TTL',
6868
dateOfExpiry: expectedDateOfExpiry,
6969
event: messageDownloadedEvent,

lambdas/ttl-create-lambda/src/infra/ttl-repository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class TtlRepository {
3232

3333
this.logger.info({
3434
description: 'Inserting item into TTL table',
35-
PK: item.data.messageUri,
35+
PK: `${item.data.senderId}_${item.data.messageReference}`,
3636
ttlTime,
3737
});
3838

@@ -60,7 +60,7 @@ export class TtlRepository {
6060
new PutCommand({
6161
TableName: this.tableName,
6262
Item: {
63-
PK: event.data.messageUri,
63+
PK: `${event.data.senderId}_${event.data.messageReference}`,
6464
SK: 'TTL',
6565
ttl: ttlTime,
6666
dateOfExpiry: ttlGsiPk,

lambdas/ttl-handle-expiry-lambda/src/__tests__/apis/dynamodb-stream-handler.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ const mockEvent: DynamoDBStreamEvent = {
2121
dynamodb: {
2222
ApproximateCreationDateTime: 1_234_567_890,
2323
Keys: {
24-
PK: { S: 'https://example.com/ttl/resource' },
24+
PK: { S: 'sender1_ref1' },
2525
SK: { S: 'METADATA' },
2626
},
2727
OldImage: {
28-
PK: { S: 'https://example.com/ttl/resource' },
28+
PK: { S: 'sender1_ref1' },
2929
SK: { S: 'METADATA' },
3030
dateOfExpiry: { S: 'dateOfExpiry' },
3131
event: {

lambdas/ttl-handle-expiry-lambda/src/apis/dynamodb-stream-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export const createHandler = ({
7070
logger.info({
7171
description: 'ItemDequeued event not sent as item withdrawn',
7272
messageReference: itemEvent.data.messageReference,
73-
messageUri: item.PK,
73+
messageUri: itemEvent.data.messageUri,
7474
senderId: itemEvent.data.senderId,
7575
});
7676
} else {

tests/playwright/digital-letters-component-tests/ttl-create.component.spec.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ test.describe('Digital Letters - Create TTL', () => {
5151
test('should create TTL and publish item enqueued event following message downloaded event', async () => {
5252
const letterId = uuidv4();
5353
const messageUri = `https://example.com/ttl/resource/${letterId}`;
54+
const messageReference = letterId;
5455

5556
await eventPublisher.sendEvents<MESHInboxMessageDownloaded>(
5657
[
@@ -60,6 +61,7 @@ test.describe('Digital Letters - Create TTL', () => {
6061
data: {
6162
...baseEvent.data,
6263
messageUri,
64+
messageReference,
6365
},
6466
},
6567
],
@@ -68,7 +70,10 @@ test.describe('Digital Letters - Create TTL', () => {
6870

6971
// Verify TTL created
7072
await expectToPassEventually(async () => {
71-
const ttl = await getTtl(messageUri);
73+
const ttl = await getTtl(
74+
SENDER_ID_VALID_FOR_NOTIFY_SANDBOX,
75+
messageReference,
76+
);
7277

7378
expect(ttl.length).toBe(1);
7479
});
@@ -91,6 +96,7 @@ test.describe('Digital Letters - Create TTL', () => {
9196
test('should create TTL and publish item enqueued event following message downloaded event - direct to print', async () => {
9297
const letterId = uuidv4();
9398
const messageUri = `https://example.com/ttl/resource/${letterId}`;
99+
const messageReference = letterId;
94100

95101
await eventPublisher.sendEvents<MESHInboxMessageDownloaded>(
96102
[
@@ -100,6 +106,7 @@ test.describe('Digital Letters - Create TTL', () => {
100106
data: {
101107
...baseEvent.data,
102108
messageUri,
109+
messageReference,
103110
senderId: SENDER_ID_SKIPS_NOTIFY,
104111
},
105112
},
@@ -109,7 +116,7 @@ test.describe('Digital Letters - Create TTL', () => {
109116

110117
// Verify TTL created
111118
await expectToPassEventually(async () => {
112-
const ttl = await getTtl(messageUri);
119+
const ttl = await getTtl(SENDER_ID_SKIPS_NOTIFY, messageReference);
113120

114121
expect(ttl.length).toBe(1);
115122
});

tests/playwright/digital-letters-component-tests/ttl-handle.component.spec.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,21 @@ test.describe('Digital Letters - Handle TTL', () => {
3939
test('should handle withdrawn item', async () => {
4040
const letterId = uuidv4();
4141
const messageUri = `https://example.com/ttl/resource/${letterId}`;
42+
const messageReference = letterId;
43+
const { senderId } = baseEvent.data;
4244

4345
const event = {
4446
...baseEvent,
4547
id: letterId,
4648
data: {
4749
...baseEvent.data,
4850
messageUri,
51+
messageReference,
4952
},
5053
} satisfies MESHInboxMessageDownloaded;
5154

5255
const ttlItem = {
53-
PK: messageUri,
56+
PK: `${senderId}_${messageReference}`,
5457
SK: 'TTL',
5558
dateOfExpiry: '2023-12-31#0',
5659
event,
@@ -61,7 +64,7 @@ test.describe('Digital Letters - Handle TTL', () => {
6164
const putResponseCode = await putTtl(ttlItem);
6265
expect(putResponseCode).toBe(200);
6366

64-
const deleteResponseCode = await deleteTtl(messageUri);
67+
const deleteResponseCode = await deleteTtl(senderId, messageReference);
6568
expect(deleteResponseCode).toBe(200);
6669

6770
await expectToPassEventually(async () => {
@@ -80,18 +83,21 @@ test.describe('Digital Letters - Handle TTL', () => {
8083
test('should handle expired item', async () => {
8184
const letterId = uuidv4();
8285
const messageUri = `https://example.com/ttl/resource/${letterId}`;
86+
const messageReference = letterId;
87+
const { senderId } = baseEvent.data;
8388

8489
const event = {
8590
...baseEvent,
8691
id: letterId,
8792
data: {
8893
...baseEvent.data,
8994
messageUri,
95+
messageReference,
9096
},
9197
} satisfies MESHInboxMessageDownloaded;
9298

9399
const ttlItem = {
94-
PK: messageUri,
100+
PK: `${senderId}_${messageReference}`,
95101
SK: 'TTL',
96102
dateOfExpiry: '2023-12-31#0',
97103
event,
@@ -101,7 +107,7 @@ test.describe('Digital Letters - Handle TTL', () => {
101107
const putResponseCode = await putTtl(ttlItem);
102108
expect(putResponseCode).toBe(200);
103109

104-
const deleteResponseCode = await deleteTtl(messageUri);
110+
const deleteResponseCode = await deleteTtl(senderId, messageReference);
105111
expect(deleteResponseCode).toBe(200);
106112

107113
await expectToPassEventually(async () => {
@@ -122,7 +128,8 @@ test.describe('Digital Letters - Handle TTL', () => {
122128
test.setTimeout(160_000);
123129

124130
const letterId = uuidv4();
125-
const messageUri = `https://example.com/ttl/resource/${letterId}`;
131+
const messageReference = letterId;
132+
const { senderId } = baseEvent.data;
126133

127134
const eventWithNoMessageUri = {
128135
...baseEvent,
@@ -134,7 +141,7 @@ test.describe('Digital Letters - Handle TTL', () => {
134141
};
135142

136143
const ttlItem = {
137-
PK: messageUri,
144+
PK: `${senderId}_${messageReference}`,
138145
SK: 'TTL',
139146
dateOfExpiry: '2023-12-31#0',
140147
event: eventWithNoMessageUri,
@@ -144,7 +151,7 @@ test.describe('Digital Letters - Handle TTL', () => {
144151
const putResponseCode = await putTtl(ttlItem);
145152
expect(putResponseCode).toBe(200);
146153

147-
const deleteResponseCode = await deleteTtl(messageUri);
154+
const deleteResponseCode = await deleteTtl(senderId, messageReference);
148155
expect(deleteResponseCode).toBe(200);
149156

150157
await expectMessageContainingString(HANDLE_TTL_DLQ_NAME, letterId, 150);

tests/playwright/helpers/dynamodb-helpers.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ import { TtlDynamodbRecord } from 'utils';
1212

1313
const dynamoDbClient = new DynamoDBClient({ region: REGION });
1414

15-
export async function getTtl(messageUri: string) {
15+
export async function getTtl(senderId: string, messageReference: string) {
16+
const pk = `${senderId}_${messageReference}`;
1617
const params = {
1718
TableName: TTL_TABLE_NAME,
18-
KeyConditionExpression: `PK = :messageUri`,
19+
KeyConditionExpression: `PK = :pk`,
1920
ExpressionAttributeValues: {
20-
':messageUri': messageUri,
21+
':pk': pk,
2122
},
2223
};
2324
const request = new QueryCommand(params);
@@ -37,12 +38,13 @@ export async function putTtl(ttlItem: TtlDynamodbRecord) {
3738
return output.$metadata.httpStatusCode;
3839
}
3940

40-
export async function deleteTtl(messageUri: string) {
41+
export async function deleteTtl(senderId: string, messageReference: string) {
42+
const pk = `${senderId}_${messageReference}`;
4143
const params = {
4244
TableName: TTL_TABLE_NAME,
4345
Key: {
4446
PK: {
45-
S: messageUri,
47+
S: pk,
4648
},
4749
SK: {
4850
S: 'TTL',

0 commit comments

Comments
 (0)