Skip to content

Commit 9f8981d

Browse files
finally get the pool of supplier details
1 parent 62ce880 commit 9f8981d

3 files changed

Lines changed: 56 additions & 0 deletions

File tree

internal/datastore/src/supplier-config-repository.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import {
66
import { Logger } from "pino";
77
import {
88
$LetterVariant,
9+
$Supplier,
910
$SupplierAllocation,
1011
$VolumeGroup,
1112
LetterVariant,
13+
Supplier,
1214
SupplierAllocation,
1315
VolumeGroup,
1416
} from "./SupplierConfigDomain";
@@ -91,4 +93,21 @@ export class SupplierConfigRepository {
9193

9294
return $SupplierAllocation.array().parse(result.Items);
9395
}
96+
97+
async getSuppliersDetails(supplierIds: string[]): Promise<Supplier[]> {
98+
const suppliers: Supplier[] = [];
99+
for (const supplierId of supplierIds) {
100+
const result = await this.ddbClient.send(
101+
new GetCommand({
102+
TableName: this.config.supplierConfigTableName,
103+
Key: { PK: "SUPPLIER", SK: supplierId },
104+
}),
105+
);
106+
if (!result.Item) {
107+
throw new Error(`Supplier with id ${supplierId} not found`);
108+
}
109+
suppliers.push($Supplier.parse(result.Item));
110+
}
111+
return suppliers;
112+
}
94113
}

lambdas/supplier-allocator/src/handler/allocate-handler.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schem
1010
import z from "zod";
1111
import {
1212
getSupplierAllocationsForVolumeGroup,
13+
getSupplierDetails,
1314
getVariantDetails,
1415
getVolumeGroupDetails,
1516
} from "../services/supplier-config";
@@ -84,6 +85,14 @@ async function getSupplierFromConfig(letterEvent: PreparedEvents, deps: Deps) {
8485
description: "Fetched supplier allocations for volume group",
8586
supplierAllocations,
8687
});
88+
89+
const supplierDetails = await getSupplierDetails(supplierAllocations, deps);
90+
deps.logger.info({
91+
description: "Fetched supplier details for supplier allocations",
92+
supplierDetails,
93+
});
94+
95+
return supplierDetails;
8796
}
8897

8998
function getSupplier(letterEvent: PreparedEvents, deps: Deps): SupplierSpec {

lambdas/supplier-allocator/src/services/supplier-config.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
LetterVariant,
3+
Supplier,
34
SupplierAllocation,
45
VolumeGroup,
56
} from "internal/datastore/src/SupplierConfigDomain";
@@ -118,3 +119,30 @@ export async function getSupplierAllocationsForVolumeGroup(
118119

119120
return allocations;
120121
}
122+
123+
export async function getSupplierDetails(
124+
supplierAllocations: SupplierAllocation[],
125+
deps: Deps,
126+
): Promise<Supplier[]> {
127+
const supplierIds = supplierAllocations.map((alloc) => alloc.supplier);
128+
129+
const supplierDetails: Supplier[] =
130+
await deps.supplierConfigRepo.getSuppliersDetails(supplierIds);
131+
132+
deps.logger.info({
133+
description: "Fetched supplier details for supplier allocations",
134+
supplierIds,
135+
supplierDetails,
136+
});
137+
138+
if (Object.keys(supplierDetails).length === 0) {
139+
deps.logger.error({
140+
description: "No supplier details found for supplier allocations",
141+
supplierIds,
142+
});
143+
throw new Error(
144+
`No supplier details found for supplier ids ${supplierIds.join(", ")}`,
145+
);
146+
}
147+
return supplierDetails;
148+
}

0 commit comments

Comments
 (0)