pgmq-hasql-0.1.1.0: src/Pgmq/Hasql/Statements/Types.hs
module Pgmq.Hasql.Statements.Types
( SendMessage (..),
SendMessageForLater (..),
BatchSendMessage (..),
BatchSendMessageForLater (..),
SendMessageWithHeaders (..),
SendMessageWithHeadersForLater (..),
BatchSendMessageWithHeaders (..),
BatchSendMessageWithHeadersForLater (..),
ReadMessage (..),
PopMessage (..),
MessageQuery (..),
BatchMessageQuery (..),
VisibilityTimeoutQuery (..),
BatchVisibilityTimeoutQuery (..),
-- Timestamp-based VT types (pgmq 1.10.0+)
VisibilityTimeoutAtQuery (..),
BatchVisibilityTimeoutAtQuery (..),
ReadWithPollMessage (..),
EnableNotifyInsert (..),
CreatePartitionedQueue (..),
QueueMetrics (..),
-- FIFO read types (pgmq 1.8.0+)
ReadGrouped (..),
ReadGroupedWithPoll (..),
-- Topic types (pgmq 1.11.0+)
BindTopic (..),
UnbindTopic (..),
SendTopic (..),
SendTopicWithHeaders (..),
BatchSendTopic (..),
BatchSendTopicForLater (..),
BatchSendTopicWithHeaders (..),
BatchSendTopicWithHeadersForLater (..),
UpdateNotifyInsert (..),
)
where
import Data.Aeson (Value)
import Pgmq.Hasql.Prelude
import Pgmq.Types (MessageBody, MessageHeaders, MessageId, QueueName, RoutingKey, TopicPattern)
type Delay = Int32
data SendMessage = SendMessage
{ queueName :: !QueueName,
messageBody :: !MessageBody,
delay :: !(Maybe Delay)
}
deriving stock (Generic)
data VisibilityTimeoutQuery = VisibilityTimeoutQuery
{ queueName :: !QueueName,
messageId :: !MessageId,
visibilityTimeoutOffset :: !Int32
}
deriving stock (Generic)
-- | Batch visibility timeout update (pgmq 1.8.0+)
data BatchVisibilityTimeoutQuery = BatchVisibilityTimeoutQuery
{ queueName :: !QueueName,
messageIds :: ![MessageId],
visibilityTimeoutOffset :: !Int32
}
deriving stock (Generic)
-- | Set visibility timeout to absolute timestamp (pgmq 1.10.0+)
data VisibilityTimeoutAtQuery = VisibilityTimeoutAtQuery
{ queueName :: !QueueName,
messageId :: !MessageId,
visibilityTime :: !UTCTime
}
deriving stock (Generic)
-- | Batch set visibility timeout to absolute timestamp (pgmq 1.10.0+)
data BatchVisibilityTimeoutAtQuery = BatchVisibilityTimeoutAtQuery
{ queueName :: !QueueName,
messageIds :: ![MessageId],
visibilityTime :: !UTCTime
}
deriving stock (Generic)
data BatchMessageQuery = BatchMessageQuery
{ queueName :: !QueueName,
messageIds :: ![MessageId]
}
deriving stock (Generic)
data MessageQuery = MessageQuery
{ queueName :: !QueueName,
messageId :: !MessageId
}
deriving stock (Generic)
data SendMessageForLater = SendMessageForLater
{ queueName :: !QueueName,
messageBody :: !MessageBody,
scheduledAt :: !UTCTime
}
deriving stock (Generic)
data BatchSendMessage = BatchSendMessage
{ queueName :: !QueueName,
messageBodies :: ![MessageBody],
delay :: !(Maybe Delay)
}
deriving stock (Generic)
data BatchSendMessageForLater = BatchSendMessageForLater
{ queueName :: !QueueName,
messageBodies :: ![MessageBody],
scheduledAt :: !UTCTime
}
deriving stock (Generic)
-- | Send message with headers (pgmq 1.5.0+)
data SendMessageWithHeaders = SendMessageWithHeaders
{ queueName :: !QueueName,
messageBody :: !MessageBody,
messageHeaders :: !MessageHeaders,
delay :: !(Maybe Delay)
}
deriving stock (Generic)
-- | Send message with headers for later (pgmq 1.5.0+)
data SendMessageWithHeadersForLater = SendMessageWithHeadersForLater
{ queueName :: !QueueName,
messageBody :: !MessageBody,
messageHeaders :: !MessageHeaders,
scheduledAt :: !UTCTime
}
deriving stock (Generic)
-- | Batch send messages with headers (pgmq 1.5.0+)
data BatchSendMessageWithHeaders = BatchSendMessageWithHeaders
{ queueName :: !QueueName,
messageBodies :: ![MessageBody],
messageHeaders :: ![MessageHeaders],
delay :: !(Maybe Delay)
}
deriving stock (Generic)
-- | Batch send messages with headers for later (pgmq 1.5.0+)
data BatchSendMessageWithHeadersForLater = BatchSendMessageWithHeadersForLater
{ queueName :: !QueueName,
messageBodies :: ![MessageBody],
messageHeaders :: ![MessageHeaders],
scheduledAt :: !UTCTime
}
deriving stock (Generic)
-- | Parameters for reading messages from a queue
-- Note: conditional field added in pgmq 1.5.0
data ReadMessage = ReadMessage
{ queueName :: !QueueName,
delay :: !Delay,
batchSize :: !(Maybe Int32),
-- | Optional JSONB filter (pgmq 1.5.0+)
conditional :: !(Maybe Value)
}
deriving stock (Generic)
data ReadWithPollMessage = ReadWithPollMessage
{ queueName :: !QueueName,
delay :: !Delay,
batchSize :: !(Maybe Int32),
maxPollSeconds :: !Int32,
pollIntervalMs :: !Int32,
conditional :: !(Maybe Value)
}
deriving stock (Generic)
-- | Parameters for popping messages from a queue (pgmq 1.7.0+)
data PopMessage = PopMessage
{ queueName :: !QueueName,
-- | Number of messages to pop (Nothing = default 1)
qty :: !(Maybe Int32)
}
deriving stock (Generic)
-- | Enable queue notifications (pgmq 1.7.0+, throttling in 1.8.0+)
data EnableNotifyInsert = EnableNotifyInsert
{ queueName :: !QueueName,
-- | Minimum ms between notifications (Nothing = default 250ms)
throttleIntervalMs :: !(Maybe Int32)
}
deriving stock (Generic)
data CreatePartitionedQueue = CreatePartitionedQueue
{ queueName :: !QueueName,
partitionInterval :: !Text,
retentionInterval :: !Text
}
deriving stock (Generic)
-- | Queue metrics returned by pgmq.metrics() and pgmq.metrics_all()
-- Note: queueVisibleLength added in pgmq 1.5.0
data QueueMetrics = QueueMetrics
{ queueName :: !Text,
queueLength :: !Int64,
newestMsgAgeSec :: !(Maybe Int32),
oldestMsgAgeSec :: !(Maybe Int32),
totalMessages :: !Int64,
scrapeTime :: !UTCTime,
-- | Count of messages available for reading (pgmq 1.5.0+)
queueVisibleLength :: !Int64
}
deriving stock (Generic, Show)
-- | Parameters for FIFO grouped read (pgmq 1.8.0+)
-- Used for both read_grouped and read_grouped_rr functions.
-- Note: conditional parameter was removed in pgmq 1.9.0 (commit 9e9c3dc)
data ReadGrouped = ReadGrouped
{ queueName :: !QueueName,
visibilityTimeout :: !Int32,
qty :: !Int32
}
deriving stock (Generic)
-- | Parameters for FIFO grouped read with polling (pgmq 1.8.0+)
-- Used for both read_grouped_with_poll and read_grouped_rr_with_poll functions.
-- Note: conditional parameter was removed in pgmq 1.9.0 (commit 9e9c3dc)
data ReadGroupedWithPoll = ReadGroupedWithPoll
{ queueName :: !QueueName,
visibilityTimeout :: !Int32,
qty :: !Int32,
maxPollSeconds :: !Int32,
pollIntervalMs :: !Int32
}
deriving stock (Generic)
-- | Bind a topic pattern to a queue (pgmq 1.11.0+)
data BindTopic = BindTopic
{ topicPattern :: !TopicPattern,
queueName :: !QueueName
}
deriving stock (Generic)
-- | Unbind a topic pattern from a queue (pgmq 1.11.0+)
data UnbindTopic = UnbindTopic
{ topicPattern :: !TopicPattern,
queueName :: !QueueName
}
deriving stock (Generic)
-- | Send a message via topic routing (pgmq 1.11.0+)
data SendTopic = SendTopic
{ routingKey :: !RoutingKey,
messageBody :: !MessageBody,
delay :: !(Maybe Delay)
}
deriving stock (Generic)
-- | Send a message via topic routing with headers (pgmq 1.11.0+)
data SendTopicWithHeaders = SendTopicWithHeaders
{ routingKey :: !RoutingKey,
messageBody :: !MessageBody,
messageHeaders :: !MessageHeaders,
delay :: !(Maybe Delay)
}
deriving stock (Generic)
-- | Batch send messages via topic routing (pgmq 1.11.0+)
data BatchSendTopic = BatchSendTopic
{ routingKey :: !RoutingKey,
messageBodies :: ![MessageBody],
delay :: !(Maybe Delay)
}
deriving stock (Generic)
-- | Batch send messages via topic routing for later (pgmq 1.11.0+)
data BatchSendTopicForLater = BatchSendTopicForLater
{ routingKey :: !RoutingKey,
messageBodies :: ![MessageBody],
scheduledAt :: !UTCTime
}
deriving stock (Generic)
-- | Batch send messages via topic routing with headers (pgmq 1.11.0+)
data BatchSendTopicWithHeaders = BatchSendTopicWithHeaders
{ routingKey :: !RoutingKey,
messageBodies :: ![MessageBody],
messageHeaders :: ![MessageHeaders],
delay :: !(Maybe Delay)
}
deriving stock (Generic)
-- | Batch send messages via topic routing with headers for later (pgmq 1.11.0+)
data BatchSendTopicWithHeadersForLater = BatchSendTopicWithHeadersForLater
{ routingKey :: !RoutingKey,
messageBodies :: ![MessageBody],
messageHeaders :: ![MessageHeaders],
scheduledAt :: !UTCTime
}
deriving stock (Generic)
-- | Update notification throttle interval (pgmq 1.11.0+)
data UpdateNotifyInsert = UpdateNotifyInsert
{ queueName :: !QueueName,
throttleIntervalMs :: !Int32
}
deriving stock (Generic)