haskell-pgmq-0.1.0.0: src/Database/PGMQ/Helpers.hs
{-|
Module : Database.PGMQ.Helper
Description : Helper utilities around Database.PGMQ.Simple
Copyright : (c) Gargantext, 2024-Present
License : AGPL
Maintainer : gargantext@iscpif.fr
Stability : experimental
Portability : POSIX
-}
{-# LANGUAGE QuasiQuotes #-}
module Database.PGMQ.Helpers
( safeSendMessage )
where
import Database.PGMQ.Simple ( createQueue, sendMessage )
import Database.PostgreSQL.Simple qualified as PSQL
import Database.PostgreSQL.Simple.SqlQQ (sql)
import Database.PGMQ.Types (Delay, SerializableMessage, Queue)
-- | This is a wrapper around 'sendMessage' that makes sure the queue exists.
safeSendMessage :: (SerializableMessage a)
=> PSQL.Connection -> Queue -> a -> Delay -> IO Int
safeSendMessage conn queue msg delay = do
PSQL.withTransaction conn $ do
let magicLockId = 112233445566 :: Int
_ <- PSQL.query conn [sql| SELECT pg_advisory_xact_lock(?) |] (PSQL.Only magicLockId) :: IO [PSQL.Only ()]
createQueue conn queue
sendMessage conn queue msg delay