{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DuplicateRecordFields #-} module ZGoTx where import Data.Aeson import qualified Data.Bson as B import qualified Data.Text as T import Database.MongoDB import GHC.Generics -- | Type to model a ZGo transaction data ZGoTx = ZGoTx { _id :: String , address :: T.Text , session :: T.Text , confirmations :: Integer , blocktime :: Integer , amount :: Double , txid :: T.Text , memo :: T.Text } deriving (Eq, Show, Generic, ToJSON) parseZGoTxBson :: B.Document -> Maybe ZGoTx parseZGoTxBson d = do i <- B.lookup "_id" d a <- B.lookup "address" d s <- B.lookup "session" d c <- B.lookup "confirmations" d am <- B.lookup "amount" d t <- B.lookup "txid" d m <- B.lookup "memo" d bt <- B.lookup "blocktime" d pure $ ZGoTx (show (i :: B.ObjectId)) a s c bt am t m encodeZGoTxBson :: ZGoTx -> B.Document encodeZGoTxBson (ZGoTx i a s c bt am t m) = if not (null i) then [ "_id" =: (read i :: B.ObjectId) , "address" =: a , "session" =: s , "confirmations" =: c , "blocktime" =: bt , "amount" =: am , "txid" =: t , "memo" =: m ] else [ "address" =: a , "session" =: s , "confirmations" =: c , "blocktime" =: bt , "amount" =: am , "txid" =: t , "memo" =: m ]