refactor: switch exams list to cached study features only

This commit is contained in:
Gregor Kleen 2021-02-04 11:07:25 +01:00
parent 500b0bba6f
commit 23fdf4af6d
2 changed files with 17 additions and 7 deletions

View File

@ -42,7 +42,7 @@ examOfficeExamResultAuth authId examResult = authByUser E.||. authByField E.||.
E.on $ studyFeatures E.^. StudyFeaturesField E.==. examOfficeField E.^. ExamOfficeFieldField E.on $ studyFeatures E.^. StudyFeaturesField E.==. examOfficeField E.^. ExamOfficeFieldField
E.where_ . E.maybe E.false id . E.subSelectMaybe . E.from $ \course -> do E.where_ . E.maybe E.false id . E.subSelectMaybe . E.from $ \course -> do
E.where_ $ course E.^. CourseId E.==. cId E.where_ $ course E.^. CourseId E.==. cId
return . E.just $ isCourseStudyFeature course studyFeatures return . E.just $ isCourseStudyFeatureCached course studyFeatures
E.where_ $ studyFeatures E.^. StudyFeaturesUser E.==. examResult E.^. ExamResultUser E.where_ $ studyFeatures E.^. StudyFeaturesUser E.==. examResult E.^. ExamResultUser
E.&&. examOfficeField E.^. ExamOfficeFieldOffice E.==. authId E.&&. examOfficeField E.^. ExamOfficeFieldOffice E.==. authId
E.&&. examOfficeField E.^. ExamOfficeFieldField E.==. studyFeatures E.^. StudyFeaturesField E.&&. examOfficeField E.^. ExamOfficeFieldField E.==. studyFeatures E.^. StudyFeaturesField

View File

@ -4,9 +4,9 @@ module Handler.Utils.StudyFeatures
, _userTableField, _userTableDegree, _userTableSemester, _userTableFieldType , _userTableField, _userTableDegree, _userTableSemester, _userTableFieldType
, UserTableStudyFeatures(..) , UserTableStudyFeatures(..)
, _UserTableStudyFeatures , _UserTableStudyFeatures
, isRelevantStudyFeature, isRelevantStudyFeatureCached , isRelevantStudyFeature, isRelevantStudyFeatureCached, isRelevantStudyFeatureCached'
, cacheStudyFeatureRelevance , cacheStudyFeatureRelevance
, isCourseStudyFeature, courseUserStudyFeatures , isCourseStudyFeature, isCourseStudyFeatureCached, courseUserStudyFeatures
, isExternalExamStudyFeature, externalExamUserStudyFeatures , isExternalExamStudyFeature, externalExamUserStudyFeatures
, isTermStudyFeature , isTermStudyFeature
, isAllocationStudyFeature, allocationUserStudyFeatures , isAllocationStudyFeature, allocationUserStudyFeatures
@ -121,12 +121,19 @@ isRelevantStudyFeatureCached :: PersistEntity record
isRelevantStudyFeatureCached termField record studyFeatures isRelevantStudyFeatureCached termField record studyFeatures
= E.bool calcNow useCache $ studyFeatures E.^. StudyFeaturesRelevanceCached = E.bool calcNow useCache $ studyFeatures E.^. StudyFeaturesRelevanceCached
where where
useCache useCache = isRelevantStudyFeatureCached' termField record studyFeatures
= E.exists . E.from $ \relevantStudyFeatures ->
E.where_ $ relevantStudyFeatures E.^. RelevantStudyFeaturesTerm E.==. record E.^. termField
E.&&. relevantStudyFeatures E.^. RelevantStudyFeaturesStudyFeatures E.==. studyFeatures E.^. StudyFeaturesId
calcNow = isRelevantStudyFeature termField record studyFeatures calcNow = isRelevantStudyFeature termField record studyFeatures
isRelevantStudyFeatureCached' :: PersistEntity record
=> EntityField record TermId
-> E.SqlExpr (Entity record)
-> E.SqlExpr (Entity StudyFeatures)
-> E.SqlExpr (E.Value Bool)
isRelevantStudyFeatureCached' termField record studyFeatures
= E.exists . E.from $ \relevantStudyFeatures ->
E.where_ $ relevantStudyFeatures E.^. RelevantStudyFeaturesTerm E.==. record E.^. termField
E.&&. relevantStudyFeatures E.^. RelevantStudyFeaturesStudyFeatures E.==. studyFeatures E.^. StudyFeaturesId
cacheStudyFeatureRelevance :: MonadIO m cacheStudyFeatureRelevance :: MonadIO m
=> (E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool)) => (E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool))
-> SqlPersistT m () -> SqlPersistT m ()
@ -146,6 +153,9 @@ cacheStudyFeatureRelevance fFilter = do
isCourseStudyFeature :: E.SqlExpr (Entity Course) -> E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool) isCourseStudyFeature :: E.SqlExpr (Entity Course) -> E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool)
isCourseStudyFeature = isRelevantStudyFeatureCached CourseTerm isCourseStudyFeature = isRelevantStudyFeatureCached CourseTerm
isCourseStudyFeatureCached :: E.SqlExpr (Entity Course) -> E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool)
isCourseStudyFeatureCached = isRelevantStudyFeatureCached' CourseTerm
courseUserStudyFeatures :: MonadIO m => CourseId -> UserId -> SqlPersistT m UserTableStudyFeatures courseUserStudyFeatures :: MonadIO m => CourseId -> UserId -> SqlPersistT m UserTableStudyFeatures
courseUserStudyFeatures cId uid = do courseUserStudyFeatures cId uid = do
feats <- E.select . E.from $ \(course `E.InnerJoin` studyFeatures `E.InnerJoin` terms `E.InnerJoin` degree) -> do feats <- E.select . E.from $ \(course `E.InnerJoin` studyFeatures `E.InnerJoin` terms `E.InnerJoin` degree) -> do