refactor(avs): reduce DB overhead in updateReceivers
This commit is contained in:
parent
cefbfad00d
commit
4e4508b919
@ -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
|
-- | 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 :: UserId -> Handler (Entity User, [Entity User], Bool)
|
||||||
updateReceivers uid = do
|
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
|
<$> getJustEntity uid
|
||||||
<*> getBy (UniqueUserAvsUser uid)
|
<*> getBy (UniqueUserAvsUser uid)
|
||||||
<*> (E.select $ do
|
<*> (E.select $ do
|
||||||
@ -501,11 +501,12 @@ updateReceivers uid = do
|
|||||||
`E.on` (\(usrSuper :& userAvs) -> usrSuper E.^. UserSupervisorSupervisor E.=?. userAvs E.?. UserAvsUser)
|
`E.on` (\(usrSuper :& userAvs) -> usrSuper E.^. UserSupervisorSupervisor E.=?. userAvs E.?. UserAvsUser)
|
||||||
E.where_ $ (usrSuper E.^. UserSupervisorUser E.==. E.val uid)
|
E.where_ $ (usrSuper E.^. UserSupervisorUser E.==. E.val uid)
|
||||||
E.&&. (usrSuper E.^. UserSupervisorRerouteNotifications)
|
E.&&. (usrSuper E.^. UserSupervisorRerouteNotifications)
|
||||||
pure (usrSuper, usrAvs)
|
pure (usrSuper E.^. UserSupervisorSupervisor, usrAvs E.?. UserAvsPersonId)
|
||||||
)
|
)
|
||||||
let (superVs, avsIds) = unzip avsSupers
|
let (superVs, avsIds) = unzip avsSupers
|
||||||
toUpdate = Set.fromList . fmap (userAvsPersonId . entityVal) $ catMaybes (avsUnderling : avsIds)
|
receiverIDs :: [UserId] = E.unValue <$> superVs
|
||||||
receiverIDs :: [UserId] = userSupervisorSupervisor . entityVal <$> superVs
|
underlingAvsId = userAvsPersonId . entityVal <$> avsUnderling
|
||||||
|
toUpdate = Set.fromList $ catMaybes (underlingAvsId : (E.unValue <$> avsIds))
|
||||||
directResult = return (underling, pure underling, True)
|
directResult = return (underling, pure underling, True)
|
||||||
forM_ toUpdate (void . maybeCatchAll . upsertAvsUserById) -- attempt to update postaddress from AVS
|
forM_ toUpdate (void . maybeCatchAll . upsertAvsUserById) -- attempt to update postaddress from AVS
|
||||||
if null receiverIDs
|
if null receiverIDs
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user