Skip to content

Commit adfe4ee

Browse files
committed
Introduce visibility timeout
1 parent 479fb16 commit adfe4ee

4 files changed

Lines changed: 18 additions & 27 deletions

File tree

infrastructure/terraform/components/api/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ No requirements.
4545
| Name | Source | Version |
4646
|------|--------|---------|
4747
| <a name="module_amendment_event_transformer"></a> [amendment\_event\_transformer](#module\_amendment\_event\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
48-
| <a name="module_amendments_queue"></a> [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
48+
| <a name="module_amendments_queue"></a> [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
4949
| <a name="module_authorizer_lambda"></a> [authorizer\_lambda](#module\_authorizer\_lambda) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
5050
| <a name="module_ddb_alarms_letter_queue"></a> [ddb\_alarms\_letter\_queue](#module\_ddb\_alarms\_letter\_queue) | ../../modules/alarms-ddb | n/a |
5151
| <a name="module_ddb_alarms_letters"></a> [ddb\_alarms\_letters](#module\_ddb\_alarms\_letters) | ../../modules/alarms-ddb | n/a |
@@ -60,16 +60,16 @@ No requirements.
6060
| <a name="module_get_status"></a> [get\_status](#module\_get\_status) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6161
| <a name="module_kms"></a> [kms](#module\_kms) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-kms.zip | n/a |
6262
| <a name="module_lambda_alarms"></a> [lambda\_alarms](#module\_lambda\_alarms) | ../../modules/alarms-lambda | n/a |
63-
| <a name="module_letter_status_updates_queue"></a> [letter\_status\_updates\_queue](#module\_letter\_status\_updates\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a |
63+
| <a name="module_letter_status_updates_queue"></a> [letter\_status\_updates\_queue](#module\_letter\_status\_updates\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
6464
| <a name="module_letter_updates_transformer"></a> [letter\_updates\_transformer](#module\_letter\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6565
| <a name="module_mi_updates_transformer"></a> [mi\_updates\_transformer](#module\_mi\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-lambda.zip | n/a |
6666
| <a name="module_patch_letter"></a> [patch\_letter](#module\_patch\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6767
| <a name="module_post_letters"></a> [post\_letters](#module\_post\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6868
| <a name="module_post_mi"></a> [post\_mi](#module\_post\_mi) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6969
| <a name="module_s3bucket_test_letters"></a> [s3bucket\_test\_letters](#module\_s3bucket\_test\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a |
7070
| <a name="module_sqs_alarms"></a> [sqs\_alarms](#module\_sqs\_alarms) | ../../modules/alarms-sqs | n/a |
71-
| <a name="module_sqs_letter_updates"></a> [sqs\_letter\_updates](#module\_sqs\_letter\_updates) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a |
72-
| <a name="module_sqs_supplier_allocator"></a> [sqs\_supplier\_allocator](#module\_sqs\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a |
71+
| <a name="module_sqs_letter_updates"></a> [sqs\_letter\_updates](#module\_sqs\_letter\_updates) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
72+
| <a name="module_sqs_supplier_allocator"></a> [sqs\_supplier\_allocator](#module\_sqs\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
7373
| <a name="module_supplier_allocator"></a> [supplier\_allocator](#module\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
7474
| <a name="module_supplier_ssl"></a> [supplier\_ssl](#module\_supplier\_ssl) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-ssl.zip | n/a |
7575
| <a name="module_update_letter_queue"></a> [update\_letter\_queue](#module\_update\_letter\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |

internal/datastore/src/__test__/letter-queue-repository.test.ts

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,32 +53,16 @@ describe("LetterQueueRepository", () => {
5353
await db.container.stop();
5454
});
5555

56-
function assertTtl(ttl: number, before: number, after: number) {
57-
const expectedLower = Math.floor(
58-
before / 1000 + 60 * 60 * db.config.letterQueueTtlHours,
59-
);
60-
const expectedUpper = Math.floor(
61-
after / 1000 + 60 * 60 * db.config.lettersTtlHours,
62-
);
63-
expect(ttl).toBeGreaterThanOrEqual(expectedLower);
64-
expect(ttl).toBeLessThanOrEqual(expectedUpper);
65-
}
66-
6756
describe("putLetter", () => {
6857
it("adds a letter to the database", async () => {
69-
const before = Date.now();
58+
jest.useFakeTimers().setSystemTime(new Date("2026-03-04T13:15:45.000Z"));
7059

7160
const pendingLetter =
7261
await letterQueueRepository.putLetter(createLetter());
7362

74-
const after = Date.now();
75-
76-
const timestampInMillis = new Date(
77-
pendingLetter.queueTimestamp,
78-
).valueOf();
79-
expect(timestampInMillis).toBeGreaterThanOrEqual(before);
80-
expect(timestampInMillis).toBeLessThanOrEqual(after);
81-
assertTtl(pendingLetter.ttl, before, after);
63+
expect(pendingLetter.queueTimestamp).toBe("2026-03-04T13:15:45.000Z");
64+
expect(pendingLetter.visibilityTimeout).toBe("2026-03-04T13:15:45.000Z");
65+
expect(pendingLetter.ttl).toBe(1_772_633_745);
8266
expect(await letterExists(db, "supplier1", "letter1")).toBe(true);
8367
});
8468

internal/datastore/src/letter-queue-repository.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,13 @@ export default class LetterQueueRepository {
2727
async putLetter(
2828
insertPendingLetter: InsertPendingLetter,
2929
): Promise<PendingLetter> {
30+
// needs to be an ISO timestamp as Db sorts alphabetically
31+
const now = new Date().toISOString();
32+
3033
const pendingLetter: PendingLetter = {
3134
...insertPendingLetter,
32-
// needs to be an ISO timestamp as Db sorts alphabetically
33-
queueTimestamp: new Date().toISOString(),
35+
queueTimestamp: now,
36+
visibilityTimeout: now,
3437
ttl: Math.floor(
3538
Date.now() / 1000 + 60 * 60 * this.config.letterQueueTtlHours,
3639
),

internal/datastore/src/types.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,18 @@ export const PendingLetterSchema = z.object({
8080
supplierId: idRef(SupplierSchema, "id"),
8181
letterId: idRef(LetterSchema, "id"),
8282
queueTimestamp: z.string().describe("Secondary index SK"),
83+
visibilityTimeout: z.string(),
8384
specificationId: z.string(),
8485
groupId: z.string(),
8586
ttl: z.int(),
8687
});
8788

8889
export type PendingLetter = z.infer<typeof PendingLetterSchema>;
8990

90-
export type InsertPendingLetter = Omit<PendingLetter, "ttl" | "queueTimestamp">;
91+
export type InsertPendingLetter = Omit<
92+
PendingLetter,
93+
"ttl" | "queueTimestamp" | "visibilityTimeout"
94+
>;
9195

9296
export const MISchemaBase = z.object({
9397
id: z.string(),

0 commit comments

Comments
 (0)