Skip to content

Commit 8d1f75d

Browse files
committed
Switch letter_status_update lambda to use eventsub SNS topic
1 parent 256710a commit 8d1f75d

23 files changed

Lines changed: 240 additions & 166 deletions

File tree

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
"**/Thumbs.db": true,
1111
".github": false,
1212
".vscode": false
13-
}
13+
},
14+
"typescript.tsdk": "node_modules/typescript/lib"
1415
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
resource "aws_lambda_event_source_mapping" "letter_status_update" {
2+
event_source_arn = module.letter_status_updates_queue.sqs_queue_arn
3+
function_name = module.letter_status_update.function_name
4+
batch_size = 10
5+
maximum_batching_window_in_seconds = 5
6+
function_response_types = [
7+
"ReportBatchItemFailures"
8+
]
9+
}

infrastructure/terraform/components/api/locals.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ locals {
2727
SUPPLIER_ID_HEADER = "nhsd-supplier-id",
2828
APIM_CORRELATION_HEADER = "nhsd-correlation-id",
2929
DOWNLOAD_URL_TTL_SECONDS = 60
30+
SNS_TOPIC_ARN = "${module.eventsub.sns_topic.arn}",
31+
EVENT_SOURCE = "/data-plane/supplier-api/${var.group}/${var.environment}/letters"
3032
}
3133

3234
core_pdf_bucket_arn = "arn:aws:s3:::comms-${var.core_account_id}-eu-west-2-${var.core_environment}-api-stg-pdf-pipeline"

infrastructure/terraform/components/api/module_lambda_letter_status_update.tf

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ data "aws_iam_policy_document" "letter_status_update" {
5959
actions = [
6060
"dynamodb:GetItem",
6161
"dynamodb:Query",
62-
"dynamodb:UpdateItem",
6362
]
6463

6564
resources = [
@@ -72,14 +71,27 @@ data "aws_iam_policy_document" "letter_status_update" {
7271
effect = "Allow"
7372

7473
actions = [
75-
"sqs:ReceiveMessage",
76-
"sqs:DeleteMessage",
77-
"sqs:GetQueueAttributes",
78-
"sqs:ChangeMessageVisibility"
74+
"sqs:ReceiveMessage",
75+
"sqs:DeleteMessage",
76+
"sqs:GetQueueAttributes",
77+
"sqs:ChangeMessageVisibility"
7978
]
8079

8180
resources = [
82-
module.letter_status_updates_queue.sqs_queue_arn
81+
module.letter_status_updates_queue.sqs_queue_arn
82+
]
83+
}
84+
85+
statement {
86+
sid = "AllowSNSPublish"
87+
effect = "Allow"
88+
89+
actions = [
90+
"sns:Publish"
91+
]
92+
93+
resources = [
94+
module.eventsub.sns_topic.arn
8395
]
8496
}
8597
}

internal/events/jest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const baseJestConfig: Config = {
2424
},
2525
},
2626

27-
coveragePathIgnorePatterns: ["/__tests__/"],
27+
coveragePathIgnorePatterns: ["/src/index.ts$", "/__tests__/"],
2828
transform: { "^.+\\.ts$": "ts-jest" },
2929
testPathIgnorePatterns: [".build"],
3030
testMatch: ["**/?(*.)+(spec|test).[jt]s?(x)"],

internal/events/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"dependencies": {
33
"@asyncapi/bundler": "^0.6.4",
4+
"@internal/datastore": "*",
45
"zod": "^4.1.11"
56
},
67
"description": "Schemas for NHS Notify Supplier API events",
@@ -50,5 +51,5 @@
5051
"typecheck": "tsc --noEmit"
5152
},
5253
"types": "dist/index.d.ts",
53-
"version": "1.0.9"
54+
"version": "1.0.10"
5455
}

lambdas/letter-updates-transformer/src/mappers/__tests__/letter-mapper.test.ts renamed to internal/events/src/events/__tests__/letter-mapper.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { $LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src";
2-
import { Letter } from "@internal/datastore";
3-
import mapLetterToCloudEvent from "../letter-mapper";
2+
import { Letter } from "internal/datastore/src/types";
3+
import { mapLetterToCloudEvent } from "../letter-mapper";
44

55
describe("letter-mapper", () => {
66
it("maps a letter to a letter event", async () => {

lambdas/letter-updates-transformer/src/mappers/letter-mapper.ts renamed to internal/events/src/events/letter-mapper.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src";
21
import { randomBytes, randomUUID } from "node:crypto";
32
import eventSchemaPackage from "@nhsdigital/nhs-notify-event-schemas-supplier-api/package.json";
4-
import { LetterForEventPub } from "../types";
3+
import { Letter } from "internal/datastore/src/types";
4+
import { LetterEvent } from "./letter-events";
55

6-
export default function mapLetterToCloudEvent(
7-
letter: LetterForEventPub,
6+
// eslint-disable-next-line import-x/prefer-default-export
7+
export function mapLetterToCloudEvent(
8+
letter: Letter,
89
source: string,
910
): LetterEvent {
1011
const eventId = randomUUID();

internal/events/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export { default as DomainBase } from "./domain/domain-base";
44
export * from "./events/event-envelope";
55
export * from "./events/letter-events";
66
export * from "./events/mi-events";
7+
export * from "./events/letter-mapper";

internal/events/tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
"declaration": true,
44
"isolatedModules": true,
55
"module": "commonjs",
6-
"outDir": "dist",
7-
"resolveJsonModule": true
6+
"outDir": "dist"
87
},
98
"exclude": [
109
"node_modules",

0 commit comments

Comments
 (0)