From 4e4508b9193ea720dcbb68aa2295a5dd3fed41c5 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 13 Feb 2023 09:55:18 +0100 Subject: [PATCH] refactor(avs): reduce DB overhead in updateReceivers --- src/Handler/Utils/Avs.hs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Handler/Utils/Avs.hs b/src/Handler/Utils/Avs.hs index 64abd304d..177dabfa2 100644 --- a/src/Handler/Utils/Avs.hs +++ b/src/Handler/Utils/Avs.hs @@ -491,7 +491,7 @@ lookupAvsUsers apis = do -- | Like `Handler.Utils.getReceivers`, but calls upsertAvsUserById on each user to ensure that postal address is up-to-date updateReceivers :: UserId -> Handler (Entity User, [Entity User], Bool) updateReceivers uid = do - (underling :: Entity User, avsUnderling :: Maybe (Entity UserAvs), avsSupers :: [(Entity UserSupervisor, Maybe (Entity UserAvs))]) <- runDB $ (,,) + (underling :: Entity User, avsUnderling :: Maybe (Entity UserAvs), avsSupers :: [(E.Value UserId, E.Value (Maybe AvsPersonId))]) <- runDB $ (,,) <$> getJustEntity uid <*> getBy (UniqueUserAvsUser uid) <*> (E.select $ do @@ -501,11 +501,12 @@ updateReceivers uid = do `E.on` (\(usrSuper :& userAvs) -> usrSuper E.^. UserSupervisorSupervisor E.=?. userAvs E.?. UserAvsUser) E.where_ $ (usrSuper E.^. UserSupervisorUser E.==. E.val uid) E.&&. (usrSuper E.^. UserSupervisorRerouteNotifications) - pure (usrSuper, usrAvs) + pure (usrSuper E.^. UserSupervisorSupervisor, usrAvs E.?. UserAvsPersonId) ) let (superVs, avsIds) = unzip avsSupers - toUpdate = Set.fromList . fmap (userAvsPersonId . entityVal) $ catMaybes (avsUnderling : avsIds) - receiverIDs :: [UserId] = userSupervisorSupervisor . entityVal <$> superVs + receiverIDs :: [UserId] = E.unValue <$> superVs + underlingAvsId = userAvsPersonId . entityVal <$> avsUnderling + toUpdate = Set.fromList $ catMaybes (underlingAvsId : (E.unValue <$> avsIds)) directResult = return (underling, pure underling, True) forM_ toUpdate (void . maybeCatchAll . upsertAvsUserById) -- attempt to update postaddress from AVS if null receiverIDs