From 49536ad05b90f859511773cd7670c766312cdcf1 Mon Sep 17 00:00:00 2001 From: Saku Laesvuori Date: Thu, 28 Sep 2023 09:17:41 +0300 Subject: [PATCH] Email applicants when resolving their applications --- backend/src/Datarekisteri/Backend/API.hs | 24 +++++++++++++++------- backend/src/Datarekisteri/Backend/Email.hs | 19 +++++++++++++---- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/backend/src/Datarekisteri/Backend/API.hs b/backend/src/Datarekisteri/Backend/API.hs index 8df4bec..2a8888b 100644 --- a/backend/src/Datarekisteri/Backend/API.hs +++ b/backend/src/Datarekisteri/Backend/API.hs @@ -31,7 +31,7 @@ import Database.Persist (Entity, entityVal, entityKey, get, (=.)) import Datarekisteri.Core.Types import Datarekisteri.Backend.DB import Datarekisteri.Backend.DB.Queries -import Datarekisteri.Backend.Email (sendVerificationEmail) +import Datarekisteri.Backend.Email (sendVerificationEmail, sendApplicationAcceptedEmail, sendApplicationRejectedEmail) import Datarekisteri.Backend.Types import Datarekisteri.Backend.Utils import qualified "base64" Data.ByteString.Base64 as B64 (encodeBase64) @@ -193,15 +193,25 @@ makeNewKey (KeyData {..}) user = do , dBKeyIsPrimaryEncryptionKey = True } -acceptApplication :: (MonadDB m, MonadTime m) => UserID -> m Unit +acceptApplication :: (MonadDB m, MonadTime m, MonadError GQLError m, MonadEmail m) => UserID -> m Unit acceptApplication user = void $ do - time <- currentTime - markAsAccepted user time + maybeEmail <- getUserEmail user + case maybeEmail of + Nothing -> throwError $ "No valid application for " <> show user <> "!" + Just email -> do + time <- currentTime + markAsAccepted user time + void $ sendApplicationAcceptedEmail $ dBEmailEmail $ entityVal email -rejectApplication :: (MonadDB m, MonadTime m) => UserID -> m Unit +rejectApplication :: (MonadDB m, MonadTime m, MonadError GQLError m, MonadEmail m) => UserID -> m Unit rejectApplication user = void $ do - time <- currentTime - markAsRejected user time + maybeEmail <- getUserEmail user + case maybeEmail of + Nothing -> throwError $ "No valid application for " <> show user <> "!" + Just email -> do + time <- currentTime + markAsRejected user time + void $ sendApplicationRejectedEmail $ dBEmailEmail $ entityVal email resolveQuery :: (MonadRequest m, MonadDB m, MonadError GQLError m, MonadPermissions m) => Query m resolveQuery = Query diff --git a/backend/src/Datarekisteri/Backend/Email.hs b/backend/src/Datarekisteri/Backend/Email.hs index 8708346..1ce4bac 100644 --- a/backend/src/Datarekisteri/Backend/Email.hs +++ b/backend/src/Datarekisteri/Backend/Email.hs @@ -8,11 +8,22 @@ import Data.Text.Lazy (fromStrict) import Datarekisteri.Core.Types import Network.Mail.Mime -sendVerificationEmail :: MonadEmail m => Email -> Text -> m () -sendVerificationEmail to secret = do +sendDatarekisteriEmail :: MonadEmail m => Email -> Text -> Text -> m () +sendDatarekisteriEmail to subject content = do from <- fromAddress - sendEmail $ simpleMail' (Address Nothing $ renderEmail to) from - "Sähköpostin vahvistuskoodi" $ fromStrict $ + sendEmail $ simpleMail' (Address Nothing $ renderEmail to) from subject $ fromStrict content + +sendVerificationEmail :: MonadEmail m => Email -> Text -> m () +sendVerificationEmail to secret = sendDatarekisteriEmail to "Sähköpostin vahvistuskoodi" $ "Vahvista sähköpostisi syöttämällä alla oleva koodi rekisteriin:\n\n" <> secret <> "\n\n" <> "Mikäli et odottanut tätä viestiä, voit jättää sen turvallisesti huomiotta." + +sendApplicationAcceptedEmail :: MonadEmail m => Email -> m () +sendApplicationAcceptedEmail to = sendDatarekisteriEmail to "Jäsenhakemus hyväksytty" $ + "Jäsenhakemuksesi Datat RY:lle on hyväksytty. Olet nyt yhdistyksen jäsen." + +sendApplicationRejectedEmail :: MonadEmail m => Email -> m () +sendApplicationRejectedEmail to = sendDatarekisteriEmail to "Jäsenhakemus hylätty" $ + "Jäsenhakemuksesi Datat RY:lle on hylätty. Voit halutessasi kysyä hakemuksen" + <> " hylkäämisen syistä yhdistyksen hallitukselta ."