chore(avs): add basic servant api for person search
This commit is contained in:
parent
0a68ea8591
commit
4818b8518e
@ -29,6 +29,8 @@ import Handler.Utils.AuthorshipStatement as Handler.Utils
|
||||
|
||||
import Handler.Utils.Term as Handler.Utils
|
||||
|
||||
import Handler.Utils.Servant.AVS as Handler.Utils
|
||||
|
||||
import Control.Monad.Logger
|
||||
|
||||
|
||||
|
||||
72
src/Handler/Utils/Servant/AVS.hs
Normal file
72
src/Handler/Utils/Servant/AVS.hs
Normal file
@ -0,0 +1,72 @@
|
||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||
{-# LANGUAGE DataKinds #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE TypeOperators #-}
|
||||
|
||||
module Handler.Utils.Servant.AVS where
|
||||
|
||||
import Import
|
||||
import Servant
|
||||
import Servant.Client
|
||||
import qualified Network.HTTP.Client as HTTP (newManager, defaultManagerSettings)
|
||||
|
||||
data AvsPersonQuery = AvsPersonQuery
|
||||
{ avsPersonQueryCardNo :: Maybe String
|
||||
, avsPersonQueryFirstName :: Maybe String
|
||||
, avsPersonQueryLastName :: Maybe String
|
||||
, avsPersonQueryInternalPersonalNo :: Maybe String
|
||||
, avsPersonQueryVersionNo :: Maybe String
|
||||
}
|
||||
deriving (Eq, Ord, Read, Show, Generic, Typeable)
|
||||
|
||||
instance Default AvsPersonQuery where
|
||||
def = AvsPersonQuery Nothing Nothing Nothing Nothing Nothing
|
||||
|
||||
deriveJSON defaultOptions
|
||||
{ fieldLabelModifier = mconcat . drop 3 . splitCamel
|
||||
, omitNothingFields = True
|
||||
, tagSingleConstructors = True
|
||||
} ''AvsPersonQuery
|
||||
|
||||
{-
|
||||
data PersonResponse = Person {..TODO..}
|
||||
data StatusResponse = StatusResponse
|
||||
-}
|
||||
|
||||
-- data StatusQuery = StatusQuery
|
||||
newtype AvsStatusQuery = AvsStatusQuery (Set UserMatriculation)
|
||||
deriveJSON defaultOptions ''AvsStatusQuery
|
||||
|
||||
type AvsPersonResponse = Value
|
||||
type AvsStatusResponse = Value
|
||||
|
||||
type AVS = BasicAuth "avs_fradrive" String :> "FraVSMService" :> "v1" :> "PersonSearch" :> ReqBody '[JSON] AvsPersonQuery :> Post '[JSON] AvsPersonResponse
|
||||
-- :<|> ("PersonStatus" :> ReqBody '[JSON] AvsStatusQuery :> Post '[JSON] AvsStatusResponse))
|
||||
|
||||
avsApi :: Proxy AVS
|
||||
avsApi = Proxy
|
||||
|
||||
|
||||
avsPersonSearch :: BasicAuthData -> AvsPersonQuery -> ClientM AvsPersonResponse
|
||||
-- avsPersonStatus :: BasicAuthData -> AvsStatusQuery -> ClientM AvsStatusResponse
|
||||
--(avsPersonSearch :<|> avsPersonStatus) = client avsApi
|
||||
avsPersonSearch = client avsApi
|
||||
|
||||
avsServer :: BaseUrl
|
||||
avsServer = BaseUrl
|
||||
{ baseUrlScheme = Https
|
||||
, baseUrlHost = "skytest.fra.fraport.de"
|
||||
, baseUrlPort = 80
|
||||
, baseUrlPath = ""
|
||||
}
|
||||
|
||||
|
||||
run :: IO ()
|
||||
run = do
|
||||
manager' <- HTTP.newManager HTTP.defaultManagerSettings
|
||||
let query = avsPersonSearch (BasicAuthData "foo" "bar") $ def { avsPersonQueryFirstName = Just "Steffen" }
|
||||
res <- runClientM query (mkClientEnv manager' avsServer)
|
||||
case res of
|
||||
Left err -> putStrLn $ "Error: " ++ tshow err
|
||||
Right resp -> do
|
||||
print resp
|
||||
14
src/Utils.hs
14
src/Utils.hs
@ -388,6 +388,20 @@ stepTextCounter text
|
||||
fromText :: (IsString a, Textual t) => t -> a
|
||||
fromText = fromString . unpack
|
||||
|
||||
{-
|
||||
-- | Captialize the first character and leave all others as they were
|
||||
textToCapital :: Text -> Text
|
||||
textToCapital s
|
||||
| Just (h,t) <- Text.uncons s
|
||||
= Text.Cons (Char.toUpper h) t
|
||||
| otherwise = s
|
||||
|
||||
snakecase2camelcase :: Text -> Text
|
||||
snakecase2camelcase t = Text.concat $ map textToCapital words
|
||||
where
|
||||
words = Text.splitOn '_' t
|
||||
-}
|
||||
|
||||
|
||||
-----------
|
||||
-- Fixed --
|
||||
|
||||
Loading…
Reference in New Issue
Block a user