{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE QuasiQuotes #-} module Simplex.Messaging.Server.QueueStore.Postgres.Migrations where import Data.List (sortOn) import Data.Text (Text) import qualified Data.Text as T import Simplex.Messaging.Agent.Store.Shared import Text.RawString.QQ (r) serverSchemaMigrations :: [(String, Text, Maybe Text)] serverSchemaMigrations = [ ("20250207_initial", m20250207_initial, Nothing), ("20250319_updated_index", m20250319_updated_index, Just down_m20250319_updated_index) ] -- | The list of migrations in ascending order by date serverMigrations :: [Migration] serverMigrations = sortOn name $ map migration serverSchemaMigrations where migration (name, up, down) = Migration {name, up, down = down} m20250207_initial :: Text m20250207_initial = T.pack [r| CREATE TABLE msg_queues( recipient_id BYTEA NOT NULL, recipient_key BYTEA NOT NULL, rcv_dh_secret BYTEA NOT NULL, sender_id BYTEA NOT NULL, sender_key BYTEA, snd_secure BOOLEAN NOT NULL, notifier_id BYTEA, notifier_key BYTEA, rcv_ntf_dh_secret BYTEA, status TEXT NOT NULL, updated_at BIGINT, deleted_at BIGINT, PRIMARY KEY (recipient_id) ); CREATE UNIQUE INDEX idx_msg_queues_sender_id ON msg_queues(sender_id); CREATE UNIQUE INDEX idx_msg_queues_notifier_id ON msg_queues(notifier_id); CREATE INDEX idx_msg_queues_deleted_at ON msg_queues (deleted_at); |] m20250319_updated_index :: Text m20250319_updated_index = T.pack [r| DROP INDEX idx_msg_queues_deleted_at; CREATE INDEX idx_msg_queues_updated_at ON msg_queues (deleted_at, updated_at); |] down_m20250319_updated_index :: Text down_m20250319_updated_index = T.pack [r| DROP INDEX idx_msg_queues_updated_at; CREATE INDEX idx_msg_queues_deleted_at ON msg_queues (deleted_at); |]