postgresql-simple-queue-0.1.0.0: src/Database/PostgreSQL/Simple/Queue/Examples/EmailQueue.hs
{-|
This is a documentation only module that exposes the source for
the async-email-example. The main file is located in examples/EmailQueue
and is reprinted here to show an example of using 'defaultMain' from
'Database.PostgreSQL.Simple.Queue.Main' to quickly build a queue consumer executable.
@
import Control.Exception.Lifted
import Control.Lens
import Control.Monad
import Control.Monad.IO.Class
import Data.Aeson as Aeson
import Data.Text
import Database.PostgreSQL.Simple.Queue
import Database.PostgreSQL.Simple.Queue.Main
import GHC.Generics
import Network.AWS as AWS
import Network.AWS.SES.SendEmail as AWS
import Network.AWS.SES.Types as AWS
main :: IO ()
main = do
env <- newEnv Discover
runResourceT $ runAWS env $ 'defaultMain' "aws-email-queue-consumer" $ \payload _ -> do
case fromJSON $ 'pValue' payload of
Aeson.Success email -> do
resp <- AWS.send $ makeEmail email
logFailedRequest resp
Aeson.Error x -> throwIO
$ userError
$ "Failed to decode payload as an Email: " ++ show x
data Email = Email
{ emailAddress :: Text
, emailSubject :: Text
, emailBody :: Text
} deriving (Show, Eq, Generic, FromJSON, ToJSON)
makeEmail :: Email -> SendEmail
makeEmail Email {..}
= sendEmail emailAddress
(set dToAddresses [emailAddress] destination)
$ message (content emailSubject)
$ set bText (Just $ content emailBody) AWS.body
logFailedRequest :: MonadIO m => SendEmailResponse -> m ()
logFailedRequest resp = do
let stat = view sersResponseStatus resp
unless (stat >= 200 && stat < 300) $
liftIO $ putStrLn $ "SES failed with status: " ++ show stat
@
-}
{-# OPTIONS_GHC -w #-}
module Database.PostgreSQL.Simple.Queue.Examples.EmailQueue where
import Database.PostgreSQL.Simple.Queue
import Database.PostgreSQL.Simple.Queue.Main