keiro-0.2.0.0: src/Keiro/Timer/Types.hs
{- | Identity and request types for durable timers, separated from their SQL
storage ("Keiro.Timer.Schema") so process-manager code can construct timer
requests without depending on the persistence layer.
-}
module Keiro.Timer.Types (
TimerId (..),
TimerRequest (..),
)
where
import Data.UUID (UUID)
import Keiro.Prelude
{- | A timer's stable identifier. A caller-chosen id makes scheduling
idempotent (rescheduling the same id updates rather than duplicates).
-}
newtype TimerId = TimerId UUID
deriving stock (Generic, Eq, Ord, Show)
{- | A request to schedule a timer.
* 'timerId' — stable id; rescheduling the same id is idempotent.
* 'processManagerName' \/ 'correlationId' — identify the saga instance the
timer belongs to, so the firing can be routed back to it.
* 'fireAt' — the earliest time the timer becomes due.
* 'payload' — opaque JSON carried through to the @fire@ action.
-}
data TimerRequest = TimerRequest
{ timerId :: !TimerId
, processManagerName :: !Text
, correlationId :: !Text
, fireAt :: !UTCTime
, payload :: !Value
}
deriving stock (Generic, Eq, Show)