module Job.Model ( getLastExecution , actualizeLastExecution , actualizeLastCheck ) where import Control.Monad.IO.Class (liftIO) import Data.Time.Clock (UTCTime, getCurrentTime) import Data.Maybe (isJust) import Database.Persist import Model.Database import Job.Kind getLastExecution :: Kind -> Persist (Maybe UTCTime) getLastExecution kind = do mbJob <- fmap entityVal <$> selectFirst [JobKind ==. kind] [] return (mbJob >>= jobLastExecution) actualizeLastExecution :: Kind -> UTCTime -> Persist () actualizeLastExecution kind time = do jobKindDefined <- isJust <$> selectFirst [JobKind ==. kind] [] if jobKindDefined then updateWhere [JobKind ==. kind] [JobLastExecution =. Just time] else insert (Job kind (Just time) (Just time)) >> return () actualizeLastCheck :: Kind -> Persist () actualizeLastCheck kind = do now <- liftIO getCurrentTime updateWhere [JobKind ==. kind] [JobLastCheck =. Just now]