refactor: switch exams list to cached study features only
This commit is contained in:
parent
500b0bba6f
commit
23fdf4af6d
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user