From 23fdf4af6d56298b06ca0d062aab995695a76294 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Thu, 4 Feb 2021 11:07:25 +0100 Subject: [PATCH] refactor: switch exams list to cached study features only --- src/Handler/Utils/ExamOffice/Exam.hs | 2 +- src/Handler/Utils/StudyFeatures.hs | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Handler/Utils/ExamOffice/Exam.hs b/src/Handler/Utils/ExamOffice/Exam.hs index e9f903471..586d9b7cb 100644 --- a/src/Handler/Utils/ExamOffice/Exam.hs +++ b/src/Handler/Utils/ExamOffice/Exam.hs @@ -42,7 +42,7 @@ examOfficeExamResultAuth authId examResult = authByUser E.||. authByField E.||. E.on $ studyFeatures E.^. StudyFeaturesField E.==. examOfficeField E.^. ExamOfficeFieldField E.where_ . E.maybe E.false id . E.subSelectMaybe . E.from $ \course -> do 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.&&. examOfficeField E.^. ExamOfficeFieldOffice E.==. authId E.&&. examOfficeField E.^. ExamOfficeFieldField E.==. studyFeatures E.^. StudyFeaturesField diff --git a/src/Handler/Utils/StudyFeatures.hs b/src/Handler/Utils/StudyFeatures.hs index 7e3dc481a..252121b17 100644 --- a/src/Handler/Utils/StudyFeatures.hs +++ b/src/Handler/Utils/StudyFeatures.hs @@ -4,9 +4,9 @@ module Handler.Utils.StudyFeatures , _userTableField, _userTableDegree, _userTableSemester, _userTableFieldType , UserTableStudyFeatures(..) , _UserTableStudyFeatures - , isRelevantStudyFeature, isRelevantStudyFeatureCached + , isRelevantStudyFeature, isRelevantStudyFeatureCached, isRelevantStudyFeatureCached' , cacheStudyFeatureRelevance - , isCourseStudyFeature, courseUserStudyFeatures + , isCourseStudyFeature, isCourseStudyFeatureCached, courseUserStudyFeatures , isExternalExamStudyFeature, externalExamUserStudyFeatures , isTermStudyFeature , isAllocationStudyFeature, allocationUserStudyFeatures @@ -121,12 +121,19 @@ isRelevantStudyFeatureCached :: PersistEntity record isRelevantStudyFeatureCached termField record studyFeatures = E.bool calcNow useCache $ studyFeatures E.^. StudyFeaturesRelevanceCached where - useCache - = E.exists . E.from $ \relevantStudyFeatures -> - E.where_ $ relevantStudyFeatures E.^. RelevantStudyFeaturesTerm E.==. record E.^. termField - E.&&. relevantStudyFeatures E.^. RelevantStudyFeaturesStudyFeatures E.==. studyFeatures E.^. StudyFeaturesId + useCache = isRelevantStudyFeatureCached' 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 => (E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool)) -> SqlPersistT m () @@ -146,6 +153,9 @@ cacheStudyFeatureRelevance fFilter = do isCourseStudyFeature :: E.SqlExpr (Entity Course) -> E.SqlExpr (Entity StudyFeatures) -> E.SqlExpr (E.Value Bool) 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 cId uid = do feats <- E.select . E.from $ \(course `E.InnerJoin` studyFeatures `E.InnerJoin` terms `E.InnerJoin` degree) -> do