Skip to content

Commit d74a0bd

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

22 files changed

Lines changed: 233 additions & 160 deletions

File tree

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: 14 additions & 2 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 = [
@@ -79,7 +78,20 @@ data "aws_iam_policy_document" "letter_status_update" {
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { $LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src";
22
import { Letter } from "@internal/datastore";
3-
import mapLetterToCloudEvent from "../letter-mapper";
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";
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",

lambdas/api-handler/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
"dependencies": {
33
"@aws-sdk/client-dynamodb": "^3.925.0",
44
"@aws-sdk/client-s3": "^3.925.0",
5+
"@aws-sdk/client-sns": "^3.925.0",
56
"@aws-sdk/client-sqs": "^3.925.0",
67
"@aws-sdk/lib-dynamodb": "^3.925.0",
78
"@aws-sdk/s3-request-presigner": "^3.925.0",
89
"@internal/datastore": "*",
910
"@internal/helpers": "*",
11+
"@nhsdigital/nhs-notify-event-schemas-supplier-api": "*",
1012
"aws-lambda": "^1.0.7",
1113
"esbuild": "^0.25.11",
1214
"pino": "^9.7.0",

0 commit comments

Comments
 (0)