{-# LANGUAGE ScopedTypeVariables #-}
module Antiope.DynamoDB
( TableName(..)
, dynamoPutItem
, dynamoQuery
, module Network.AWS.DynamoDB
) where
import Antiope.Core (ToText (..))
import Antiope.DynamoDB.Types (TableName (TableName))
import Control.Lens
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Data.HashMap.Strict (HashMap)
import Data.Text (Text)
import Network.AWS (HasEnv)
import Network.AWS.DynamoDB
import qualified Network.AWS as AWS
dynamoPutItem :: (MonadUnliftIO m, HasEnv e)
=> e
-> TableName
-> HashMap Text AttributeValue
-> m PutItemResponse
dynamoPutItem e table item = AWS.runResourceT $ AWS.runAWS e $ AWS.send $ putItem (table & toText) & piItem .~ item
dynamoQuery :: (MonadUnliftIO m, HasEnv e)
=> e
-> TableName
-> (Query
-> Query)
-> m QueryResponse
dynamoQuery e table f = AWS.runResourceT $ AWS.runAWS e $ AWS.send $ f $ query (table & toText)