packages feed

haskell-pgmq-0.1.0.0: bin/simple-test/Main.hs

{-# LANGUAGE QuasiQuotes #-}

{-
Database.PGMQ.Simple functions tests.
-}


module Main
where

import Control.Monad (void)
import Database.PostgreSQL.Simple qualified as PSQL
import Database.PGMQ.Simple qualified as PGMQ
import Database.PGMQ.Types qualified as PGMQ


main :: IO ()
main = do
  let connInfo = PSQL.defaultConnectInfo { PSQL.connectUser = "postgres"
                                         , PSQL.connectDatabase = "postgres" }
  conn <- PSQL.connect connInfo

  PGMQ.initialize conn

  PGMQ.dropQueue conn "test"
  -- _metrics <- PGMQ.getMetrics conn "test"

  let queue = "test"
  PGMQ.createQueue conn "test"
  void $ PGMQ.sendMessage conn queue ("test message 1" :: String) 0
  void $ PGMQ.sendMessage conn queue ("test message 2" :: String) 0

  allMetrics <- PGMQ.getMetricsAll conn
  putStrLn $ "allMetrics: " <> show allMetrics

  testMetrics <- PGMQ.getMetrics conn queue
  putStrLn $ "testMetrics: " <> show testMetrics

  
  mMsg1 <- (PGMQ.readMessage conn queue 10 :: IO (Maybe (PGMQ.Message String)))
  case mMsg1 of
    Nothing -> undefined
    Just msg -> do
      putStrLn $ "message 1: " <> PGMQ.message msg
    
      PGMQ.archiveMessage conn queue (PGMQ.msgId msg)


  mMsg2 <- (PGMQ.readMessage conn queue 10 :: IO (Maybe (PGMQ.Message String)))
  case mMsg2 of
    Nothing -> undefined
    Just msg -> do
      putStrLn $ "message 2: " <> PGMQ.message msg
    
      PGMQ.deleteMessage conn queue (PGMQ.msgId msg)

    
  void $ PGMQ.sendMessages conn queue (["test message 3", "test message 4"] :: [String]) 0

  messagesA <- (PGMQ.readMessages conn queue 10 2 :: IO [PGMQ.Message String])
  PGMQ.archiveMessages conn queue [PGMQ.msgId msg | msg <- messagesA]


  void $ PGMQ.sendMessages conn queue (["test message 5", "test message 6"] :: [String]) 0

  messagesD <- (PGMQ.readMessages conn queue 10 2 :: IO [PGMQ.Message String])
  PGMQ.deleteMessages conn queue [PGMQ.msgId msg | msg <- messagesD]

  queues <- PGMQ.listQueues conn
  putStrLn $ "queues: " <> show queues
    

  void $ PGMQ.sendMessage conn queue ("test message 7" :: String) 0
  mMsgP <- (PGMQ.popMessage conn queue :: IO (Maybe (PGMQ.Message String)))
  case mMsgP of
    Nothing -> undefined
    Just msg -> do
      putStrLn $ "message pop: " <> PGMQ.message msg
      PGMQ.setMessageVt conn queue (PGMQ.msgId msg) 10

  void $ PGMQ.sendMessage conn queue ("test message 8" :: String) 0
  metrics <- PGMQ.getMetrics conn queue
  putStrLn $ "before purge: " <> show metrics
  PGMQ.purgeQueue conn queue
  metrics2 <- PGMQ.getMetrics conn queue
  putStrLn $ "after purge: " <> show metrics2
   
  -- PGMQ.dropQueue conn queue
    
  return ()