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..8be83782 --- /dev/null +++ b/database/migrations/000009_add_order_status_reminder_table.sql @@ -0,0 +1,30 @@ +-- +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); + + +-- +goose Down +DROP INDEX IF EXISTS idx_order_status_reminder_status_triggered_at; +DROP TABLE IF EXISTS order_status_reminder; +DROP TYPE IF EXISTS reminder_status; 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