chore(avs): add basic servant api for person search

This commit is contained in:
Steffen Jost 2022-06-23 19:10:38 +02:00
parent 0a68ea8591
commit 4818b8518e
3 changed files with 88 additions and 0 deletions

View File

@ -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

View 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

View File

@ -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 --