1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
{-# LANGUAGE DeriveGeneric #-}
module Shop.Types
( Product(..)
, Article(..)
, TokenId(..)
, ChargeForm(..)
, ChargeResponse(..)
)
where
import Protolude hiding (Product(..))
import Data.Aeson (ToJSON(..), FromJSON(..), Value(..))
import Servant.API
import Web.Stripe.Types (TokenId(..))
data ChargeResponse = ChargeResponse
{ chargeid :: Text
, chargeamount :: Text
, chargeemail :: Text
, chargedate :: Text
}
deriving (Show, Read, Generic, Eq)
instance ToJSON ChargeResponse
instance FromJSON ChargeResponse
data Product = Product
{ nom :: Text
, description :: Text
, poids :: Int
-- ^ poids en grammes
, prix :: Int
-- ^ prix en centimes d'euros
}
deriving (Show, Read, Generic, Eq)
instance ToJSON Product
instance FromJSON Product
data Article = Article
{ product :: Product
, quantity :: Int
}
deriving (Show, Read, Generic, Eq)
instance ToJSON Article
instance FromJSON Article
instance FromHttpApiData TokenId where
parseUrlPiece = Right . TokenId . toS
instance FromJSON TokenId where
parseJSON (String v) = return $ TokenId (toS v)
parseJSON _ = mzero
instance ToJSON TokenId where
toJSON (TokenId tid) = String tid
data ChargeForm = ChargeForm
{ name :: Text
, email :: Text
, phone :: Text
, date :: Text
, articles :: [Article]
, tokenid :: TokenId
}
deriving (Show, Read, Generic, Eq)
instance ToJSON ChargeForm
instance FromJSON ChargeForm
|