60 lines
1.4 KiB
Haskell
60 lines
1.4 KiB
Haskell
|
{-# 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
|
||
|
]
|