Skip to content

Commit 2ca0bb9

Browse files
finally get the pool of supplier details
1 parent 89ad57b commit 2ca0bb9

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
LetterVariant,
1212
SupplierAllocation,
1313
VolumeGroup,
14+
$Supplier, Supplier,
1415
} from "./SupplierConfigDomain";
1516

1617
export type SupplierConfigRepositoryConfig = {
@@ -91,4 +92,21 @@ export class SupplierConfigRepository {
9192

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

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)