-- | Completed-job archive types. Arbiter archives an acked job when @archiveFor@
-- is positive and removes it after the retention period. Re-enqueue entries with
-- 'Arbiter.Core.HighLevel.reEnqueueFromArchive'.
module Arbiter.Core.Job.Archive
  ( ArchiveJob (..)
  ) where

import Data.Aeson (Value)
import Data.Int (Int64)
import Data.Time (UTCTime)
import GHC.Generics (Generic)

import Arbiter.Core.Job.DLQ (JobSnapshot)

-- | A completed job in the archive.
data ArchiveJob payload = ArchiveJob
  { forall payload. ArchiveJob payload -> Int64
archivePrimaryKey :: Int64
  -- ^ Archive table primary key. The snapshot keeps its own job id.
  , forall payload. ArchiveJob payload -> UTCTime
completedAt :: UTCTime
  -- ^ When the job was acked and archived
  , forall payload. ArchiveJob payload -> JobSnapshot payload
jobSnapshot :: JobSnapshot payload
  -- ^ Full job state at time of completion (payload, attempts, etc.)
  , forall payload. ArchiveJob payload -> Maybe Value
archivedResult :: Maybe Value
  -- ^ Handler result stored for a completed root job (one with no parent).
  }
  deriving stock (ArchiveJob payload -> ArchiveJob payload -> Bool
(ArchiveJob payload -> ArchiveJob payload -> Bool)
-> (ArchiveJob payload -> ArchiveJob payload -> Bool)
-> Eq (ArchiveJob payload)
forall payload.
Eq payload =>
ArchiveJob payload -> ArchiveJob payload -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall payload.
Eq payload =>
ArchiveJob payload -> ArchiveJob payload -> Bool
== :: ArchiveJob payload -> ArchiveJob payload -> Bool
$c/= :: forall payload.
Eq payload =>
ArchiveJob payload -> ArchiveJob payload -> Bool
/= :: ArchiveJob payload -> ArchiveJob payload -> Bool
Eq, (forall x. ArchiveJob payload -> Rep (ArchiveJob payload) x)
-> (forall x. Rep (ArchiveJob payload) x -> ArchiveJob payload)
-> Generic (ArchiveJob payload)
forall x. Rep (ArchiveJob payload) x -> ArchiveJob payload
forall x. ArchiveJob payload -> Rep (ArchiveJob payload) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall payload x. Rep (ArchiveJob payload) x -> ArchiveJob payload
forall payload x. ArchiveJob payload -> Rep (ArchiveJob payload) x
$cfrom :: forall payload x. ArchiveJob payload -> Rep (ArchiveJob payload) x
from :: forall x. ArchiveJob payload -> Rep (ArchiveJob payload) x
$cto :: forall payload x. Rep (ArchiveJob payload) x -> ArchiveJob payload
to :: forall x. Rep (ArchiveJob payload) x -> ArchiveJob payload
Generic, Int -> ArchiveJob payload -> ShowS
[ArchiveJob payload] -> ShowS
ArchiveJob payload -> String
(Int -> ArchiveJob payload -> ShowS)
-> (ArchiveJob payload -> String)
-> ([ArchiveJob payload] -> ShowS)
-> Show (ArchiveJob payload)
forall payload. Show payload => Int -> ArchiveJob payload -> ShowS
forall payload. Show payload => [ArchiveJob payload] -> ShowS
forall payload. Show payload => ArchiveJob payload -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall payload. Show payload => Int -> ArchiveJob payload -> ShowS
showsPrec :: Int -> ArchiveJob payload -> ShowS
$cshow :: forall payload. Show payload => ArchiveJob payload -> String
show :: ArchiveJob payload -> String
$cshowList :: forall payload. Show payload => [ArchiveJob payload] -> ShowS
showList :: [ArchiveJob payload] -> ShowS
Show)