feat(crontab): cronjob for pruning expired invitations
This commit is contained in:
parent
1c2f2b7221
commit
a9c527621e
@ -66,6 +66,7 @@ import Jobs.Handler.SendCourseCommunication
|
||||
import Jobs.Handler.Invitation
|
||||
import Jobs.Handler.SendPasswordReset
|
||||
import Jobs.Handler.TransactionLog
|
||||
import Jobs.Handler.PruneInvitations
|
||||
|
||||
import Jobs.HealthReport
|
||||
|
||||
|
||||
@ -12,6 +12,8 @@ import Data.Semigroup (Max(..))
|
||||
|
||||
import Data.Time.Zones
|
||||
|
||||
import Handler.Utils.DateTime
|
||||
|
||||
import Control.Monad.Trans.Writer (WriterT, execWriterT)
|
||||
import Control.Monad.Writer.Class (MonadWriter(..))
|
||||
|
||||
@ -44,6 +46,16 @@ determineCrontab = execWriterT $ do
|
||||
, cronRateLimit = appJobCronInterval
|
||||
, cronNotAfter = Right CronNotScheduled
|
||||
}
|
||||
|
||||
oldestInvitationMUTC <- lift $ preview (_head . _entityVal . _invitationExpiresAt . _Just) <$> selectList [InvitationExpiresAt !=. Nothing] [Asc InvitationExpiresAt, LimitTo 1]
|
||||
whenIsJust oldestInvitationMUTC $ \oldestInvUTC -> tell $ HashMap.singleton
|
||||
(JobCtlQueue JobPruneInvitations)
|
||||
Cron
|
||||
{ cronInitial = CronTimestamp $ utcToLocalTime oldestInvUTC
|
||||
, cronRepeat = CronRepeatOnChange
|
||||
, cronRateLimit = nominalDay
|
||||
, cronNotAfter = Right CronNotScheduled
|
||||
}
|
||||
|
||||
tell . flip foldMap universeF $ \kind ->
|
||||
case appHealthCheckInterval kind of
|
||||
|
||||
13
src/Jobs/Handler/PruneInvitations.hs
Normal file
13
src/Jobs/Handler/PruneInvitations.hs
Normal file
@ -0,0 +1,13 @@
|
||||
module Jobs.Handler.PruneInvitations
|
||||
( dispatchJobPruneInvitations
|
||||
) where
|
||||
|
||||
import Import
|
||||
|
||||
import Database.Persist.Sql (deleteWhereCount)
|
||||
|
||||
dispatchJobPruneInvitations :: Handler ()
|
||||
dispatchJobPruneInvitations = do
|
||||
now <- liftIO getCurrentTime
|
||||
n <- runDB $ deleteWhereCount [ InvitationExpiresAt <. Just now ]
|
||||
$logInfoS "PruneInvitations" [st|Deleted #{n} expired invitations|]
|
||||
@ -49,6 +49,7 @@ data Job = JobSendNotification { jRecipient :: UserId, jNotification :: Notifica
|
||||
| JobSendPasswordReset { jRecipient :: UserId
|
||||
}
|
||||
| JobTruncateTransactionLog
|
||||
| JobPruneInvitations
|
||||
| JobDeleteTransactionLogIPs
|
||||
deriving (Eq, Ord, Show, Read, Generic, Typeable)
|
||||
data Notification = NotificationSubmissionRated { nSubmission :: SubmissionId }
|
||||
|
||||
@ -149,6 +149,8 @@ makeLenses_ ''Occurrences
|
||||
|
||||
makeLenses_ ''PredDNF
|
||||
|
||||
makeLenses_ ''Invitation
|
||||
|
||||
makeLenses_ ''ExamBonusRule
|
||||
makeLenses_ ''ExamGradingRule
|
||||
makeLenses_ ''ExamResult
|
||||
|
||||
Loading…
Reference in New Issue
Block a user