From 1361951a167afcb0297bb472bc5c4a2b638ed778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaros=C5=82aw=20Rejterada?= Date: Mon, 27 Apr 2026 13:36:23 +0200 Subject: [PATCH] feat: Update SQL queries to use latest_order_status for improved accuracy --- lambdas/src/lib/db/order-db-client.test.ts | 12 +++--- lambdas/src/lib/db/order-db-client.ts | 12 +++--- lambdas/src/lib/db/order-db.test.ts | 20 +++------- lambdas/src/lib/db/order-db.ts | 20 +++------- .../src/lib/db/test-result-db-client.test.ts | 38 +++++-------------- lambdas/src/lib/db/test-result-db-client.ts | 24 ++++-------- 6 files changed, 40 insertions(+), 86 deletions(-) diff --git a/lambdas/src/lib/db/order-db-client.test.ts b/lambdas/src/lib/db/order-db-client.test.ts index f542ad789..f558d844a 100644 --- a/lambdas/src/lib/db/order-db-client.test.ts +++ b/lambdas/src/lib/db/order-db-client.test.ts @@ -85,22 +85,20 @@ describe("OrderDbClient", () => { o.created_at AS created_at, o.test_code AS test_code, tt.description AS test_description, - os.status_code AS status_code, + los.status_code AS status_code, st.description AS status_description, - os.created_at AS status_created_at, + los.created_at AS status_created_at, s.supplier_id AS supplier_id, s.supplier_name AS supplier_name, p.nhs_number AS patient_nhs_number, p.birth_date AS patient_birth_date FROM test_order o INNER JOIN test_type tt ON tt.test_code = o.test_code - INNER JOIN order_status os ON os.order_uid = o.order_uid - INNER JOIN status_type st ON st.status_code = os.status_code + INNER JOIN latest_order_status los ON los.order_uid = o.order_uid + INNER JOIN status_type st ON st.status_code = los.status_code INNER JOIN patient_mapping p ON p.patient_uid = o.patient_uid INNER JOIN supplier s ON s.supplier_id = o.supplier_id - WHERE o.order_uid = $1::uuid AND p.nhs_number = $2 AND p.birth_date = $3::date - ORDER BY os.created_at DESC - LIMIT 1;`; + WHERE o.order_uid = $1::uuid AND p.nhs_number = $2 AND p.birth_date = $3::date;`; const actualQuery = mockDbClient.query.mock.calls[0][0]; diff --git a/lambdas/src/lib/db/order-db-client.ts b/lambdas/src/lib/db/order-db-client.ts index 9ef089993..f941dd99f 100644 --- a/lambdas/src/lib/db/order-db-client.ts +++ b/lambdas/src/lib/db/order-db-client.ts @@ -35,22 +35,20 @@ export class OrderDbClient { o.created_at AS created_at, o.test_code AS test_code, tt.description AS test_description, - os.status_code AS status_code, + los.status_code AS status_code, st.description AS status_description, - os.created_at AS status_created_at, + los.created_at AS status_created_at, s.supplier_id AS supplier_id, s.supplier_name AS supplier_name, p.nhs_number AS patient_nhs_number, p.birth_date AS patient_birth_date FROM test_order o INNER JOIN test_type tt ON tt.test_code = o.test_code - INNER JOIN order_status os ON os.order_uid = o.order_uid - INNER JOIN status_type st ON st.status_code = os.status_code + INNER JOIN latest_order_status los ON los.order_uid = o.order_uid + INNER JOIN status_type st ON st.status_code = los.status_code INNER JOIN patient_mapping p ON p.patient_uid = o.patient_uid INNER JOIN supplier s ON s.supplier_id = o.supplier_id - WHERE o.order_uid = $1::uuid AND p.nhs_number = $2 AND p.birth_date = $3::date - ORDER BY os.created_at DESC - LIMIT 1; + WHERE o.order_uid = $1::uuid AND p.nhs_number = $2 AND p.birth_date = $3::date; `; const result = await this.dbClient.query(query, [ diff --git a/lambdas/src/lib/db/order-db.test.ts b/lambdas/src/lib/db/order-db.test.ts index e6e439acb..af2c731d6 100644 --- a/lambdas/src/lib/db/order-db.test.ts +++ b/lambdas/src/lib/db/order-db.test.ts @@ -27,7 +27,7 @@ describe("OrderService", () => { o.patient_uid, r.status AS result_status, r.correlation_id, - os.status_code AS order_status_code + los.status_code AS order_status_code FROM test_order o LEFT JOIN Lateral ( SELECT @@ -37,12 +37,7 @@ describe("OrderService", () => { WHERE o.order_uid = r.order_uid ORDER BY r.created_at DESC LIMIT 1 ) r ON true - LEFT JOIN Lateral ( - SELECT os.status_code - FROM order_status os - WHERE o.order_uid = os.order_uid - ORDER BY os.created_at DESC LIMIT 1 - ) os ON true + LEFT JOIN latest_order_status los ON los.order_uid = o.order_uid WHERE o.order_uid = $1::uuid; `; @@ -104,15 +99,12 @@ describe("OrderService", () => { ); const expectedOrderStatusQuery = ` - WITH latest AS - (SELECT status_code - FROM order_status - WHERE order_uid = $1::uuid - ORDER BY created_at DESC - LIMIT 1) INSERT INTO order_status (order_uid, status_code, correlation_id) SELECT $1::uuid, $2::varchar(50), $3::uuid - WHERE NOT EXISTS (SELECT 1 FROM latest WHERE latest.status_code = $2::varchar(50)); + WHERE NOT EXISTS ( + SELECT 1 FROM latest_order_status + WHERE order_uid = $1::uuid AND status_code = $2::varchar(50) + ); `; const expectedResultStatusQuery = ` INSERT INTO result_status (order_uid, status, correlation_id) diff --git a/lambdas/src/lib/db/order-db.ts b/lambdas/src/lib/db/order-db.ts index e5e57b39d..7643a02bb 100644 --- a/lambdas/src/lib/db/order-db.ts +++ b/lambdas/src/lib/db/order-db.ts @@ -24,7 +24,7 @@ export class OrderService { o.patient_uid, r.status AS result_status, r.correlation_id, - os.status_code AS order_status_code + los.status_code AS order_status_code FROM test_order o LEFT JOIN Lateral ( SELECT @@ -34,12 +34,7 @@ export class OrderService { WHERE o.order_uid = r.order_uid ORDER BY r.created_at DESC LIMIT 1 ) r ON true - LEFT JOIN Lateral ( - SELECT os.status_code - FROM order_status os - WHERE o.order_uid = os.order_uid - ORDER BY os.created_at DESC LIMIT 1 - ) os ON true + LEFT JOIN latest_order_status los ON los.order_uid = o.order_uid WHERE o.order_uid = $1::uuid; `; @@ -61,15 +56,12 @@ export class OrderService { try { await this.dbClient.withTransaction(async (dbClient) => { const orderStatusQuery = ` - WITH latest AS - (SELECT status_code - FROM order_status - WHERE order_uid = $1::uuid - ORDER BY created_at DESC - LIMIT 1) INSERT INTO order_status (order_uid, status_code, correlation_id) SELECT $1::uuid, $2::varchar(50), $3::uuid - WHERE NOT EXISTS (SELECT 1 FROM latest WHERE latest.status_code = $2::varchar(50)); + WHERE NOT EXISTS ( + SELECT 1 FROM latest_order_status + WHERE order_uid = $1::uuid AND status_code = $2::varchar(50) + ); `; await dbClient.query(orderStatusQuery, [orderUid, statusCode, correlationId]); diff --git a/lambdas/src/lib/db/test-result-db-client.test.ts b/lambdas/src/lib/db/test-result-db-client.test.ts index 0df4c500b..cfdda3d7a 100644 --- a/lambdas/src/lib/db/test-result-db-client.test.ts +++ b/lambdas/src/lib/db/test-result-db-client.test.ts @@ -1,5 +1,5 @@ -import { TestResultDbClient, type TestResult } from "./test-result-db-client"; import { type DBClient } from "./db-client"; +import { type TestResult, TestResultDbClient } from "./test-result-db-client"; describe("TestResultDbClient", () => { let testResultDbClient: TestResultDbClient; @@ -36,11 +36,7 @@ describe("TestResultDbClient", () => { rowCount: 1, }); - const result = await testResultDbClient.getResult( - orderId, - nhsNumber, - dateOfBirth, - ); + const result = await testResultDbClient.getResult(orderId, nhsNumber, dateOfBirth); expect(result).toEqual(mockTestResult); expect(mockDbClient.query).toHaveBeenCalledWith(expect.any(String), [ @@ -56,11 +52,7 @@ describe("TestResultDbClient", () => { rowCount: 0, }); - const result = await testResultDbClient.getResult( - orderId, - nhsNumber, - dateOfBirth, - ); + const result = await testResultDbClient.getResult(orderId, nhsNumber, dateOfBirth); expect(result).toBeNull(); expect(mockDbClient.query).toHaveBeenCalledWith(expect.any(String), [ @@ -82,11 +74,7 @@ describe("TestResultDbClient", () => { rowCount: 1, }); - const result = await testResultDbClient.getResult( - orderId, - nhsNumber, - dateOfBirth, - ); + const result = await testResultDbClient.getResult(orderId, nhsNumber, dateOfBirth); expect(result).toEqual(mockTestResult); expect(result?.status).toBe("RESULT_WITHHELD"); @@ -108,14 +96,9 @@ describe("TestResultDbClient", () => { FROM test_order o INNER JOIN patient_mapping p ON p.patient_uid = o.patient_uid INNER JOIN result_status rs ON rs.order_uid = o.order_uid + INNER JOIN latest_order_status los ON los.order_uid = o.order_uid WHERE - ( - SELECT os.status_code = 'COMPLETE' - FROM order_status os - WHERE os.order_uid = $1::uuid - ORDER BY os.created_at DESC - LIMIT 1 - ) AND + los.status_code = 'COMPLETE' AND o.order_uid = $1::uuid AND p.nhs_number = $2 AND p.birth_date = $3::date @@ -125,8 +108,7 @@ describe("TestResultDbClient", () => { const actualQuery = mockDbClient.query.mock.calls[0][0]; // Normalize whitespace for comparison - const normalizeQuery = (query: string) => - query.replace(/\s+/g, " ").trim(); + const normalizeQuery = (query: string) => query.replace(/\s+/g, " ").trim(); expect(normalizeQuery(actualQuery)).toBe(normalizeQuery(expectedQuery)); expect(mockDbClient.query).toHaveBeenCalledWith(expect.any(String), [ @@ -159,9 +141,9 @@ describe("TestResultDbClient", () => { const dbError = new Error("Database connection failed"); mockDbClient.query.mockRejectedValue(dbError); - await expect( - testResultDbClient.getResult(orderId, nhsNumber, dateOfBirth), - ).rejects.toThrow("Database connection failed"); + await expect(testResultDbClient.getResult(orderId, nhsNumber, dateOfBirth)).rejects.toThrow( + "Database connection failed", + ); }); }); }); diff --git a/lambdas/src/lib/db/test-result-db-client.ts b/lambdas/src/lib/db/test-result-db-client.ts index 0a5b4735b..96c5275cb 100644 --- a/lambdas/src/lib/db/test-result-db-client.ts +++ b/lambdas/src/lib/db/test-result-db-client.ts @@ -11,11 +11,7 @@ export interface TestResult { export class TestResultDbClient { constructor(private readonly dbClient: DBClient) {} - public async getResult( - orderId: string, - nhsNumber: string, - dateOfBirth: Date, - ) { + public async getResult(orderId: string, nhsNumber: string, dateOfBirth: Date) { const query = ` SELECT rs.result_id AS id, @@ -24,14 +20,9 @@ export class TestResultDbClient { FROM test_order o INNER JOIN patient_mapping p ON p.patient_uid = o.patient_uid INNER JOIN result_status rs ON rs.order_uid = o.order_uid + INNER JOIN latest_order_status los ON los.order_uid = o.order_uid WHERE - ( - SELECT os.status_code = 'COMPLETE' - FROM order_status os - WHERE os.order_uid = $1::uuid - ORDER BY os.created_at DESC - LIMIT 1 - ) AND + los.status_code = 'COMPLETE' AND o.order_uid = $1::uuid AND p.nhs_number = $2 AND p.birth_date = $3::date @@ -39,10 +30,11 @@ export class TestResultDbClient { LIMIT 1; `; - const result = await this.dbClient.query< - TestResult, - [string, string, Date] - >(query, [orderId, nhsNumber, dateOfBirth]); + const result = await this.dbClient.query(query, [ + orderId, + nhsNumber, + dateOfBirth, + ]); return result?.rows[0] ?? null; }