refactor(firm): performance foreign-supervisor filter

This commit is contained in:
Steffen Jost 2023-11-10 17:00:10 +01:00
parent 674f6fd81f
commit 71c290996d

View File

@ -298,18 +298,30 @@ mkFirmAllTable isAdmin uid = do
) )
) )
, single ("foreign-supervisor", FilterColumn $ \row (getLast -> criterion) -> , single ("foreign-supervisor", FilterColumn $ \row (getLast -> criterion) ->
let checkSuper = do -- let checkSuper = do
usrSpr <- E.from $ E.table @UserSupervisor -- usrSpr <- E.from $ E.table @UserSupervisor
E.where_ $ E.notExists (do -- E.where_ $ E.notExists (do
spr <- E.from $ E.table @UserCompany -- spr <- E.from $ E.table @UserCompany
E.where_ $ spr E.^. UserCompanyCompany E.==. queryAllCompany row E.^. CompanyId -- E.where_ $ spr E.^. UserCompanyCompany E.==. queryAllCompany row E.^. CompanyId
E.&&. spr E.^. UserCompanyUser E.==. usrSpr E.^. UserSupervisorSupervisor -- E.&&. spr E.^. UserCompanyUser E.==. usrSpr E.^. UserSupervisorSupervisor
) E.&&. E.exists (do -- ) E.&&. E.exists (do
usr <- E.from $ E.table @UserCompany -- usr <- E.from $ E.table @UserCompany
E.where_ $ usr E.^. UserCompanyCompany E.==. queryAllCompany row E.^. CompanyId -- E.where_ $ usr E.^. UserCompanyCompany E.==. queryAllCompany row E.^. CompanyId
E.&&. usr E.^. UserCompanyUser E.==. usrSpr E.^. UserSupervisorUser -- E.&&. usr E.^. UserCompanyUser E.==. usrSpr E.^. UserSupervisorUser
) -- )
in case criterion of let checkSuper = do
usr <- E.from $ E.table @UserCompany
E.where_ $ usr E.^. UserCompanyCompany E.==. queryAllCompany row E.^. CompanyId
E.&&. E.exists (do
usrSpr <- E.from $ E.table @UserSupervisor
E.where_ $ usrSpr E.^. UserSupervisorUser E.==. usr E.^. UserCompanyUser
E.&&. E.notExists (do
sprCmp <- E.from $ E.table @UserCompany
E.where_ $ sprCmp E.^. UserCompanyCompany E.==. queryAllCompany row E.^. CompanyId
E.&&. sprCmp E.^. UserCompanyUser E.==. usrSpr E.^. UserSupervisorSupervisor
)
)
in case criterion of
Nothing -> E.true Nothing -> E.true
Just True -> E.exists checkSuper Just True -> E.exists checkSuper
Just False -> E.notExists checkSuper Just False -> E.notExists checkSuper