Skip to content

Commit 6d35b7f

Browse files
committed
source include acct and environment
1 parent 5bc4e0e commit 6d35b7f

File tree

10 files changed

+27
-19
lines changed

10 files changed

+27
-19
lines changed

infrastructure/terraform/components/api/module_lambda_letter_updates_transformer.tf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ module "letter_updates_transformer" {
3636
log_subscription_role_arn = local.acct.log_subscription_role_arn
3737

3838
lambda_env_vars = merge(local.common_lambda_env_vars, {
39-
EVENTPUB_SNS_TOPIC_ARN = "${module.eventpub.sns_topic.arn}"
39+
EVENTPUB_SNS_TOPIC_ARN = "${module.eventpub.sns_topic.arn}",
40+
EVENT_SOURCE = "/data-plane/supplier-api/${var.group}/${var.environment}/letters"
4041
})
4142
}
4243

internal/events/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@
5050
"typecheck": "tsc --noEmit"
5151
},
5252
"types": "dist/index.d.ts",
53-
"version": "1.0.5"
53+
"version": "1.0.6"
5454
}

internal/events/schemas/examples/letter.ACCEPTED.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"recordedtime": "2025-08-28T08:45:00.000Z",
1818
"severitynumber": 2,
1919
"severitytext": "INFO",
20-
"source": "/data-plane/supplier-api/prod/update-status",
20+
"source": "/data-plane/supplier-api/nhs-supplier-api-prod/main/update-status",
2121
"specversion": "1.0",
2222
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
2323
"time": "2025-08-28T08:45:00.000Z",

internal/events/schemas/examples/letter.FORWARDED.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"recordedtime": "2025-08-28T08:45:00.000Z",
2020
"severitynumber": 2,
2121
"severitytext": "INFO",
22-
"source": "/data-plane/supplier-api/prod/update-status",
22+
"source": "/data-plane/supplier-api/nhs-supplier-api-prod/main/update-status",
2323
"specversion": "1.0",
2424
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
2525
"time": "2025-08-28T08:45:00.000Z",

internal/events/schemas/examples/letter.RETURNED.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"recordedtime": "2025-08-28T08:45:00.000Z",
2020
"severitynumber": 2,
2121
"severitytext": "INFO",
22-
"source": "/data-plane/supplier-api/prod/update-status",
22+
"source": "/data-plane/supplier-api/nhs-supplier-api-prod/main/update-status",
2323
"specversion": "1.0",
2424
"subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479",
2525
"time": "2025-08-28T08:45:00.000Z",

lambdas/letter-updates-transformer/src/__tests__/letter-updates-transformer.test.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,18 @@ jest.mock("crypto", () => ({
2626
randomBytes: (size: number) => randomBytes[String(size)],
2727
}));
2828

29-
describe("letter-updates-transformer Lambda", () => {
30-
const mockedDeps: jest.Mocked<Deps> = {
29+
const eventSource = "/data-plane/supplier-api/nhs-supplier-api-dev/main/letters";
30+
const mockedDeps: jest.Mocked<Deps> = {
3131
snsClient: { send: jest.fn() } as unknown as SNSClient,
3232
logger: { info: jest.fn(), error: jest.fn() } as unknown as pino.Logger,
3333
env: {
3434
EVENTPUB_SNS_TOPIC_ARN: "arn:aws:sns:region:account:topic",
35+
EVENT_SOURCE: "/data-plane/supplier-api/nhs-supplier-api-dev/main/letters"
3536
} as unknown as EnvVars,
3637
} as Deps;
3738

39+
describe("letter-updates-transformer Lambda", () => {
40+
3841
beforeEach(() => {
3942
jest.useFakeTimers();
4043
});
@@ -50,7 +53,7 @@ describe("letter-updates-transformer Lambda", () => {
5053
const newLetter = generateLetter("PRINTED");
5154
const expectedEntries = [
5255
expect.objectContaining({
53-
Message: JSON.stringify(mapLetterToCloudEvent(newLetter)),
56+
Message: JSON.stringify(mapLetterToCloudEvent(newLetter, eventSource)),
5457
}),
5558
];
5659

@@ -76,7 +79,7 @@ describe("letter-updates-transformer Lambda", () => {
7679
newLetter.reasonCode = "R1";
7780
const expectedEntries = [
7881
expect.objectContaining({
79-
Message: JSON.stringify(mapLetterToCloudEvent(newLetter)),
82+
Message: JSON.stringify(mapLetterToCloudEvent(newLetter, eventSource)),
8083
}),
8184
];
8285

@@ -103,7 +106,7 @@ describe("letter-updates-transformer Lambda", () => {
103106
newLetter.reasonCode = "R2";
104107
const expectedEntries = [
105108
expect.objectContaining({
106-
Message: JSON.stringify(mapLetterToCloudEvent(newLetter)),
109+
Message: JSON.stringify(mapLetterToCloudEvent(newLetter, eventSource)),
107110
}),
108111
];
109112

@@ -168,7 +171,7 @@ describe("letter-updates-transformer Lambda", () => {
168171
const newLetters = generateLetters(10, "PRINTED");
169172
const expectedEntries = newLetters.map((letter) =>
170173
expect.objectContaining({
171-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
174+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
172175
}),
173176
);
174177

@@ -197,19 +200,19 @@ describe("letter-updates-transformer Lambda", () => {
197200
newLetters.slice(0, 10).map((letter, index) =>
198201
expect.objectContaining({
199202
Id: expect.stringMatching(new RegExp(`-${index}$`)),
200-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
203+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
201204
}),
202205
),
203206
newLetters.slice(10, 20).map((letter, index) =>
204207
expect.objectContaining({
205208
Id: expect.stringMatching(new RegExp(`-${index}$`)),
206-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
209+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
207210
}),
208211
),
209212
newLetters.slice(20).map((letter, index) =>
210213
expect.objectContaining({
211214
Id: expect.stringMatching(new RegExp(`-${index}$`)),
212-
Message: JSON.stringify(mapLetterToCloudEvent(letter)),
215+
Message: JSON.stringify(mapLetterToCloudEvent(letter, eventSource)),
213216
}),
214217
),
215218
];

lambdas/letter-updates-transformer/src/env.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { z } from "zod";
22

33
const EnvVarsSchema = z.object({
44
EVENTPUB_SNS_TOPIC_ARN: z.string(),
5+
EVENT_SOURCE: z.string(),
56
});
67

78
export type EnvVars = z.infer<typeof EnvVarsSchema>;

lambdas/letter-updates-transformer/src/letter-updates-transformer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ export default function createHandler(deps: Deps): Handler<KinesisStreamEvent> {
3030
isChanged(record, "status") || isChanged(record, "reasonCode"),
3131
)
3232
.map((element) => extractNewLetter(element))
33-
.map((element) => mapLetterToCloudEvent(element));
33+
.map((element) => mapLetterToCloudEvent(element, deps.env.EVENT_SOURCE));
3434

3535
for (const batch of generateBatches(cloudEvents)) {
3636
deps.logger.info({
37-
description: "Publishing batch",
37+
description: "Publishing batch",
3838
size: batch.length,
3939
letterEvents: batch,
4040
});

lambdas/letter-updates-transformer/src/mappers/__tests__/letter-mapper.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@ describe("letter-mapper", () => {
1414
reasonText: "Reason text",
1515
updatedAt: "2025-11-24T15:55:18.000Z",
1616
} as Letter;
17-
const event = mapLetterToCloudEvent(letter);
17+
const source = "/data-plane/supplier-api/nhs-supplier-api-dev/main/letters";
18+
const event = mapLetterToCloudEvent(letter, source);
1819

1920
// Check it conforms to the letter event schema - parse will throw an error if not
2021
$LetterEvent.parse(event);
2122
expect(event.type).toBe("uk.nhs.notify.supplier-api.letter.PRINTED.v1");
2223
expect(event.dataschema).toBe(
2324
`https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.PRINTED.${event.dataschemaversion}.schema.json`,
2425
);
25-
expect(event.dataschemaversion).toBe("1.0.5");
26+
expect(event.dataschemaversion).toBe("1.0.6");
2627
expect(event.subject).toBe("letter-origin/supplier-api/letter/id1");
2728
expect(event.time).toBe("2025-11-24T15:55:18.000Z");
2829
expect(event.recordedtime).toBe("2025-11-24T15:55:18.000Z");
@@ -41,5 +42,6 @@ describe("letter-mapper", () => {
4142
event: event.id,
4243
},
4344
});
45+
expect(event.source).toBe(source);
4446
});
4547
});

lambdas/letter-updates-transformer/src/mappers/letter-mapper.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { LetterForEventPub } from "../types";
55

66
export default function mapLetterToCloudEvent(
77
letter: LetterForEventPub,
8+
source: string
89
): LetterEvent {
910
const eventId = randomUUID();
1011
const dataschemaversion = eventSchemaPackage.version;
@@ -15,7 +16,7 @@ export default function mapLetterToCloudEvent(
1516
plane: "data",
1617
dataschema: `https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.${letter.status}.${dataschemaversion}.schema.json`,
1718
dataschemaversion,
18-
source: "/data-plane/supplier-api/letters",
19+
source: source,
1920
subject: `letter-origin/supplier-api/letter/${letter.id}`,
2021

2122
data: {

0 commit comments

Comments
 (0)