mixpanel-client-0.1.0.0: src/MixPanel/Types/TrackData.hs
{-# LANGUAGE ExistentialQuantification #-}
module MixPanel.Types.TrackData
( TrackData(..)
, Properties
, mkProperties
) where
import Data.Aeson ( ToJSON
, toJSON
, encode
, Value(..)
, Object
, (.=)
)
import Data.Text ( Text )
import qualified Data.ByteString.Base64.Lazy as B64
import Data.Time.Clock.POSIX ( POSIXTime )
import GHC.Exts ( fromList )
import GHC.Generics ( Generic )
import Servant.API
import Data.String.Conv ( toS )
import MixPanel.Types.Core ( AuthToken )
data TrackData = TrackData
{ event :: Text
, properties :: Properties
} deriving (Generic, ToJSON)
instance ToHttpApiData TrackData where
toUrlPiece = toS . B64.encode . encode
data Properties = Properties
{ token :: AuthToken
, distinctId :: Maybe Text
, time :: Maybe POSIXTime
, ip :: Maybe Text
, extraProperties :: Object
}
instance ToJSON Properties where
toJSON Properties{..} = Object $ extraProperties <> fromList
[ "token" .= token
, "distinct_id" .= distinctId
, "time" .= time
, "ip" .= ip
]
mkProperties :: AuthToken -> Object -> Properties
mkProperties token obj = Properties
{ token = token
, distinctId = Nothing
, time = Nothing
, ip = Nothing
, extraProperties = obj
}