Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions lambdas/src/lib/db/order-db-client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand Down
12 changes: 5 additions & 7 deletions lambdas/src/lib/db/order-db-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<Order, [string, string, Date]>(query, [
Expand Down
20 changes: 6 additions & 14 deletions lambdas/src/lib/db/order-db.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
`;

Expand Down Expand Up @@ -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)
Expand Down
20 changes: 6 additions & 14 deletions lambdas/src/lib/db/order-db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
`;

Expand All @@ -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]);

Expand Down
38 changes: 10 additions & 28 deletions lambdas/src/lib/db/test-result-db-client.test.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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), [
Expand All @@ -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), [
Expand All @@ -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");
Expand All @@ -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
Expand All @@ -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), [
Expand Down Expand Up @@ -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",
);
});
});
});
24 changes: 8 additions & 16 deletions lambdas/src/lib/db/test-result-db-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Comment thread
cptiv2020 marked this conversation as resolved.
const query = `
SELECT
rs.result_id AS id,
Expand All @@ -24,25 +20,21 @@ 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
ORDER BY rs.created_at DESC
LIMIT 1;
`;

const result = await this.dbClient.query<
TestResult,
[string, string, Date]
>(query, [orderId, nhsNumber, dateOfBirth]);
const result = await this.dbClient.query<TestResult, [string, string, Date]>(query, [
orderId,
nhsNumber,
dateOfBirth,
]);

return result?.rows[0] ?? null;
}
Expand Down
Loading