36 lines
837 B
Haskell
36 lines
837 B
Haskell
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
|
||
|
module Xero where
|
||
|
|
||
|
import Data.Aeson
|
||
|
import qualified Data.Bson as B
|
||
|
import qualified Data.Text as T
|
||
|
import Database.MongoDB
|
||
|
import GHC.Generics
|
||
|
|
||
|
-- | Type to represent a Xero app configuration
|
||
|
data Xero =
|
||
|
Xero
|
||
|
{ x_id :: ObjectId
|
||
|
, x_clientId :: T.Text
|
||
|
, x_clientSecret :: T.Text
|
||
|
}
|
||
|
deriving (Eq, Show)
|
||
|
|
||
|
instance ToJSON Xero where
|
||
|
toJSON (Xero i cI s) =
|
||
|
object ["_id" .= show i, "clientId" .= cI, "clientSecret" .= s]
|
||
|
|
||
|
instance Val Xero where
|
||
|
val (Xero i cI s) = Doc ["_id" =: i, "clientId" =: cI, "clientSecret" =: s]
|
||
|
cast' (Doc d) = do
|
||
|
i <- B.lookup "_id" d
|
||
|
cI <- B.lookup "clientId" d
|
||
|
s <- B.lookup "clientSecret" d
|
||
|
Just (Xero i cI s)
|
||
|
cast' _ = Nothing
|
||
|
|
||
|
-- Database actions
|
||
|
findXero :: Action IO (Maybe Document)
|
||
|
findXero = findOne (select [] "xero")
|