Modify endpoint to create new owner

This commit is contained in:
Rene Vergara 2023-05-08 16:01:46 -05:00
parent cbc4e02766
commit a201810134
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
3 changed files with 71 additions and 26 deletions

View file

@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Modified API tests to use `session` parameter.
- Modified `api/owner` endpoint to use a specific data structure to create new owners
## [1.4.1] - 2023-05-02

View file

@ -275,6 +275,39 @@ instance Val Owner where
, "crmToken" =: cT
]
-- | Type to represent informational data for Owners from UI
data OwnerData =
OwnerData
{ od_first :: T.Text
, od_last :: T.Text
, od_name :: T.Text
, od_street :: T.Text
, od_city :: T.Text
, od_state :: T.Text
, od_postal :: T.Text
, od_country :: T.Text
, od_email :: T.Text
, od_website :: T.Text
, od_phone :: T.Text
}
deriving (Eq, Show)
instance FromJSON OwnerData where
parseJSON =
withObject "OwnerData" $ \obj -> do
f <- obj .: "first"
l <- obj .: "last"
n <- obj .: "name"
s <- obj .: "street"
c <- obj .: "city"
st <- obj .: "state"
p <- obj .: "postal"
co <- obj .: "country"
e <- obj .: "email"
w <- obj .: "website"
ph <- obj .: "phone"
pure $ OwnerData f l n s c st p co e w ph
-- Database actions
-- | Function to upsert an Owner
upsertOwner :: Owner -> Action IO ()

View file

@ -938,33 +938,44 @@ routes pipe config = do
])
--Upsert owner to DB
post "/api/owner" $ do
s <- param "session"
u <- liftAndCatchIO $ run (findUser s)
o <- jsonData
let q = payload (o :: Payload Owner)
if not (opayconf q)
then do
_ <- liftAndCatchIO $ run (upsertOwner q)
status created201
else do
known <- liftAndCatchIO $ listAddresses nodeUser nodePwd
if oaddress q `elem` map addy known
then do
_ <- liftAndCatchIO $ run (upsertOwner q)
status created201
else do
vkInfo <-
now <- liftIO getCurrentTime
let q = payload (o :: Payload OwnerData)
case parseUserBson =<< u of
Nothing -> status internalServerError500
Just u' -> do
liftAndCatchIO $
makeZcashCall
nodeUser
nodePwd
"z_importviewingkey"
[Data.Aeson.String (T.strip (oviewkey q)), "no"]
let content = getResponseBody vkInfo :: RpcResponse Object
if isNothing (err content)
then do
_ <- liftAndCatchIO $ run (upsertOwner q)
status created201
else do
status internalServerError500
run $
upsertOwner $
Owner
Nothing
(uaddress u')
(od_name q)
"usd"
False
0
False
0
(od_first q)
(od_last q)
(od_email q)
(od_street q)
(od_city q)
(od_state q)
(od_postal q)
(od_phone q)
(od_website q)
(od_country q)
False
False
False
now
False
""
""
status accepted202
--Get items associated with the given address
get "/api/items" $ do
addr <- param "address"