From fe20c75ed9a5abcaff49327529f66960a36d9d0c Mon Sep 17 00:00:00 2001 From: iichr Date: Fri, 10 Apr 2026 17:16:22 +0100 Subject: [PATCH 1/5] feat: add order_status_reminder table and seed some sample data --- database/03-seed-hometest-data.sql | 11 +++++++++++ database/schema_diagram.puml | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/database/03-seed-hometest-data.sql b/database/03-seed-hometest-data.sql index 7cdf61fe..25f1d01f 100644 --- a/database/03-seed-hometest-data.sql +++ b/database/03-seed-hometest-data.sql @@ -141,3 +141,14 @@ VALUES ( 'def5a6b7-4567-4cde-8fab-45abcdefabcd' ) ON CONFLICT (correlation_id) DO NOTHING; + +INSERT INTO order_status_reminder (reminder_id, order_uid, trigger_status, reminder_number, status, triggered_at) +VALUES ( + 'efa6b7c8-5678-4def-8abc-56abcdefabcd', + 'e9c0d1e2-9012-4bcd-8efa-90abcdefabcd', + 'CONFIRMED', + 1, + 'SCHEDULED', + '2026-04-10T12:56:00Z' +) +ON CONFLICT (order_uid, trigger_status, reminder_number) DO NOTHING; diff --git a/database/schema_diagram.puml b/database/schema_diagram.puml index 9b51fa24..124b02ce 100644 --- a/database/schema_diagram.puml +++ b/database/schema_diagram.puml @@ -107,6 +107,18 @@ entity "session" as session { unique(refresh_token_id) } +entity "order_status_reminder" as order_status_reminder { + **reminder_id : uuid** + *order_uid : uuid* + *trigger_status : varchar(50)* + reminder_number : smallint + status : reminder_status + triggered_at : timestamp + sent_at : timestamp + created_at : timestamp + unique(order_uid, trigger_status, reminder_number) +} + ' Relationships patient ||--o{ orders : "patient_uid" supplier ||--o{ orders : "supplier_id" @@ -118,8 +130,10 @@ test ||--o{ offering : "test_code" orders ||--o{ order_status : "order_uid" orders ||--o{ result_status : "order_uid" orders ||--o| consent : "order_uid" +orders ||--o{ order_status_reminder : "order_uid" status_type ||--o{ order_status : "status_code" +status_type ||--o{ order_status_reminder : "trigger_status" result_type ||--o{ result_status : "status" @enduml From 9cbe32714c098ce6ef42e267b06ab5deb8bef628 Mon Sep 17 00:00:00 2001 From: iichr Date: Mon, 13 Apr 2026 11:35:40 +0100 Subject: [PATCH 2/5] fix: use explicity pk on conflict in seed data for order status reminders --- database/03-seed-hometest-data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/03-seed-hometest-data.sql b/database/03-seed-hometest-data.sql index 25f1d01f..03b213e9 100644 --- a/database/03-seed-hometest-data.sql +++ b/database/03-seed-hometest-data.sql @@ -151,4 +151,4 @@ VALUES ( 'SCHEDULED', '2026-04-10T12:56:00Z' ) -ON CONFLICT (order_uid, trigger_status, reminder_number) DO NOTHING; +ON CONFLICT (reminder_id) DO NOTHING; From dfd95ec366647ce70821796ee9970f1eefff8702 Mon Sep 17 00:00:00 2001 From: iichr Date: Mon, 13 Apr 2026 13:03:46 +0100 Subject: [PATCH 3/5] feat: move to enum and renumber migration --- ...000009_add_order_status_reminder_table.sql | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 database/migrations/000009_add_order_status_reminder_table.sql diff --git a/database/migrations/000009_add_order_status_reminder_table.sql b/database/migrations/000009_add_order_status_reminder_table.sql new file mode 100644 index 00000000..cfe6feb7 --- /dev/null +++ b/database/migrations/000009_add_order_status_reminder_table.sql @@ -0,0 +1,34 @@ +-- +goose Up +CREATE TYPE reminder_status AS ENUM ( + 'SCHEDULED', + 'QUEUED', + 'FAILED', + 'CANCELLED' +); + +CREATE TABLE IF NOT EXISTS order_status_reminder +( + reminder_id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + order_uid uuid NOT NULL REFERENCES test_order (order_uid) ON DELETE CASCADE, + trigger_status varchar(50) NOT NULL REFERENCES status_type (status_code), + reminder_number smallint NOT NULL CHECK (reminder_number >= 1), + status reminder_status NOT NULL, + triggered_at timestamp with time zone NOT NULL, + sent_at timestamp with time zone, + created_at timestamp with time zone NOT NULL DEFAULT current_timestamp, + CONSTRAINT uq_order_status_reminder + UNIQUE (order_uid, trigger_status, reminder_number) +); + +CREATE INDEX IF NOT EXISTS idx_order_status_reminder_status_triggered_at +ON order_status_reminder (status, triggered_at); + +CREATE INDEX IF NOT EXISTS idx_order_status_reminder_order_uid +ON order_status_reminder (order_uid); + + +-- +goose Down +DROP INDEX IF EXISTS idx_order_status_reminder_order_uid; +DROP INDEX IF EXISTS idx_order_status_reminder_status_triggered_at; +DROP TABLE IF EXISTS order_status_reminder; +DROP TYPE IF EXISTS reminder_status; From 3070029195852d030a0f053325d537735d999264 Mon Sep 17 00:00:00 2001 From: iichr Date: Mon, 13 Apr 2026 13:35:35 +0100 Subject: [PATCH 4/5] feat: remove order status reminder seeded data --- database/03-seed-hometest-data.sql | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/database/03-seed-hometest-data.sql b/database/03-seed-hometest-data.sql index 03b213e9..7cdf61fe 100644 --- a/database/03-seed-hometest-data.sql +++ b/database/03-seed-hometest-data.sql @@ -141,14 +141,3 @@ VALUES ( 'def5a6b7-4567-4cde-8fab-45abcdefabcd' ) ON CONFLICT (correlation_id) DO NOTHING; - -INSERT INTO order_status_reminder (reminder_id, order_uid, trigger_status, reminder_number, status, triggered_at) -VALUES ( - 'efa6b7c8-5678-4def-8abc-56abcdefabcd', - 'e9c0d1e2-9012-4bcd-8efa-90abcdefabcd', - 'CONFIRMED', - 1, - 'SCHEDULED', - '2026-04-10T12:56:00Z' -) -ON CONFLICT (reminder_id) DO NOTHING; From 70639306ac151e8bf2653d925a87d620e8d068e3 Mon Sep 17 00:00:00 2001 From: iichr Date: Mon, 13 Apr 2026 13:46:28 +0100 Subject: [PATCH 5/5] feat: rm redundant index on order_status_reminder table --- .../migrations/000009_add_order_status_reminder_table.sql | 4 ---- 1 file changed, 4 deletions(-) diff --git a/database/migrations/000009_add_order_status_reminder_table.sql b/database/migrations/000009_add_order_status_reminder_table.sql index cfe6feb7..8be83782 100644 --- a/database/migrations/000009_add_order_status_reminder_table.sql +++ b/database/migrations/000009_add_order_status_reminder_table.sql @@ -23,12 +23,8 @@ CREATE TABLE IF NOT EXISTS order_status_reminder CREATE INDEX IF NOT EXISTS idx_order_status_reminder_status_triggered_at ON order_status_reminder (status, triggered_at); -CREATE INDEX IF NOT EXISTS idx_order_status_reminder_order_uid -ON order_status_reminder (order_uid); - -- +goose Down -DROP INDEX IF EXISTS idx_order_status_reminder_order_uid; DROP INDEX IF EXISTS idx_order_status_reminder_status_triggered_at; DROP TABLE IF EXISTS order_status_reminder; DROP TYPE IF EXISTS reminder_status;