43 lines
1.8 KiB
Haskell
43 lines
1.8 KiB
Haskell
module Jobs.Handler.CorrectorInvitation
|
|
( dispatchJobCorrectorInvitation
|
|
) where
|
|
|
|
import Import
|
|
|
|
import Text.Hamlet
|
|
|
|
import qualified Data.HashSet as HashSet
|
|
|
|
import qualified Data.CaseInsensitive as CI
|
|
|
|
import Utils.Lens
|
|
|
|
|
|
dispatchJobCorrectorInvitation :: UserId -> SheetCorrectorInvitation -> Handler ()
|
|
dispatchJobCorrectorInvitation jInviter jCorrectorInvitation@SheetCorrectorInvitation{..} = do
|
|
ctx <- runDB . runMaybeT $ do
|
|
sheet <- MaybeT $ get sheetCorrectorInvitationSheet
|
|
course <- MaybeT . get $ sheetCourse sheet
|
|
void . MaybeT $ getByValue jCorrectorInvitation
|
|
user <- MaybeT $ get jInviter
|
|
return (sheet, course, user)
|
|
|
|
case ctx of
|
|
Just (Sheet{..}, Course{..}, User{..}) -> do
|
|
let baseRoute = CSheetR courseTerm courseSchool courseShorthand sheetName $ SCorrInviteR sheetCorrectorInvitationEmail
|
|
jwt <- encodeToken =<< bearerToken jInviter (Just $ HashSet.singleton baseRoute) Nothing Nothing Nothing
|
|
let
|
|
invitationUrl :: SomeRoute UniWorX
|
|
invitationUrl = SomeRoute (baseRoute, [(toPathPiece GetBearer, toPathPiece jwt)])
|
|
invitationUrl' <- toTextUrl invitationUrl
|
|
|
|
mailT def $ do
|
|
_mailTo .= [Address Nothing (CI.original $ sheetCorrectorInvitationEmail)]
|
|
replaceMailHeader "Reply-To" . Just . renderAddress $ Address (Just userDisplayName) (CI.original userEmail)
|
|
replaceMailHeader "Auto-Submitted" $ Just "auto-generated"
|
|
setSubjectI $ MsgMailSubjectCorrectorInvitation courseTerm courseSchool courseShorthand sheetName
|
|
|
|
addPart ($(ihamletFile "templates/mail/correctorInvitation.hamlet") :: HtmlUrlI18n UniWorXMessage (Route UniWorX))
|
|
Nothing -> runDB .
|
|
deleteBy $ UniqueSheetCorrectorInvitation sheetCorrectorInvitationEmail sheetCorrectorInvitationSheet
|