95 lines
2.2 KiB
Haskell
95 lines
2.2 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# 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 :: Maybe ObjectId
|
|
, address :: T.Text
|
|
, session :: T.Text
|
|
, confirmations :: Integer
|
|
, blocktime :: Integer
|
|
, amount :: Double
|
|
, txid :: T.Text
|
|
, memo :: T.Text
|
|
}
|
|
deriving (Eq, Show, Generic)
|
|
|
|
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 i 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" =: i
|
|
, "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
|
|
]
|
|
|
|
instance Val ZGoTx where
|
|
cast' (Doc 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
|
|
Just (ZGoTx i a s c bt am t m)
|
|
cast' _ = Nothing
|
|
val (ZGoTx i a s c bt am t m) =
|
|
case i of
|
|
Just oid ->
|
|
Doc
|
|
[ "_id" =: i
|
|
, "address" =: a
|
|
, "session" =: s
|
|
, "confirmations" =: c
|
|
, "blocktime" =: bt
|
|
, "amount" =: am
|
|
, "txid" =: t
|
|
, "memo" =: m
|
|
]
|
|
Nothing ->
|
|
Doc
|
|
[ "address" =: a
|
|
, "session" =: s
|
|
, "confirmations" =: c
|
|
, "blocktime" =: bt
|
|
, "amount" =: am
|
|
, "txid" =: t
|
|
, "memo" =: m
|
|
]
|