diff --git a/src/Utils/Avs.hs b/src/Utils/Avs.hs index 7dfe7148c..e7007921a 100644 --- a/src/Utils/Avs.hs +++ b/src/Utils/Avs.hs @@ -32,10 +32,10 @@ type AVSGetRampLicences = "RampDrivingLicenceInfo" :> ReqBody '[JSON] AvsQueryG type AVSSetRampLicences = "RampDrivingLicence" :> ReqBody '[JSON] AvsQuerySetLicences :> Post '[JSON] AvsResponseSetLicences avsMaxSetLicenceAtOnce :: Int -avsMaxSetLicenceAtOnce = 90 -- maximum input set size for avsQuerySetLicences as enforced by AVS +avsMaxSetLicenceAtOnce = 80 -- maximum input set size for avsQuerySetLicences as enforced by AVS avsMaxQueryAtOnce :: Int -avsMaxQueryAtOnce = 900 -- maximum input set size for avsQueryStatus as enforced by AVS +avsMaxQueryAtOnce = 500 -- maximum input set size for avsQueryStatus as enforced by AVS avsApi :: Proxy AVS @@ -96,17 +96,18 @@ mkAvsQuery baseUrl basicAuth cliEnv = AvsQuery | baseUrl == base = Right $ AvsResponsePerson mempty -- WORKAROUND: AVS server erroneously returns 404 if no matching person could be found in its database! catch404toEmpty other = other - splitQuery :: (Wrapped a, Wrapped c, Unwrapped a ~ Set b, Semigroup (Unwrapped c)) - => (a -> ClientM c) -> a -> ClientM c - splitQuery rawQuery q - | Set.size s <= avsMaxQueryAtOnce = rawQuery q - | otherwise = do - let (avsid1, avsid2) = Set.splitAt avsMaxQueryAtOnce s - res1 <- rawQuery $ view _Unwrapped' avsid1 - res2 <- splitQuery rawQuery $ view _Unwrapped' avsid2 - return $ view _Unwrapped' (res1 ^. _Wrapped' <> res2 ^. _Wrapped') - where - s = view _Wrapped' q +splitQuery :: (Wrapped a, Wrapped c, Unwrapped a ~ Set b, Semigroup (Unwrapped c)) + => (a -> ClientM c) -> a -> ClientM c +splitQuery rawQuery q + | avsMaxQueryAtOnce >= Set.size s = rawQuery q + | otherwise = do + $logInfoS "AVS" $ "Splitting large query for input Set " <> tshow (Set.size s) + let (avsid1, avsid2) = Set.splitAt avsMaxQueryAtOnce s + res1 <- rawQuery $ view _Unwrapped' avsid1 + res2 <- splitQuery rawQuery $ view _Unwrapped' avsid2 + return $ view _Unwrapped' (res1 ^. _Wrapped' <> res2 ^. _Wrapped') + where + s = view _Wrapped' q #endif -----------------------