diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs index a23709849..1f3ee0117 100644 --- a/src/Handler/Course.hs +++ b/src/Handler/Course.hs @@ -36,33 +36,30 @@ postCNotesR _ _ _ = defaultLayout [whamlet|You have corrector access to this cou postCFavouriteR :: TermId -> SchoolId -> CourseShorthand -> Handler () postCFavouriteR tid ssh csh = void $ do - muid <- maybeAuthPair + authPair@(uid, _) <- requireAuthPair runDB $ void $ do - mcid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh - if | Just cid <- mcid, Just uid <- view _1 <$> muid -> do - now <- liftIO getCurrentTime - -- Nothing means blacklist - -- should never return FavouriteCurrent - newReason <- storedFavouriteReason tid ssh csh muid <&> (\case - -- Maybe (Maybe reason, blacklist) - Nothing -> Just FavouriteManual - Just (_reason, True) -> Just FavouriteVisited - Just (Just FavouriteManual, False) -> Nothing - Just (_reason, False) -> Just FavouriteManual) - -- change stored reason in DB - case newReason of - (Just reason) -> do - void $ E.upsertBy - (UniqueCourseFavourite uid cid) - (CourseFavourite uid cid reason now) - [P.Update CourseFavouriteReason reason P.Assign] - E.deleteBy $ UniqueCourseNoFavourite uid cid - Nothing -> do - E.deleteBy $ UniqueCourseFavourite uid cid - void $ E.upsertBy - (UniqueCourseNoFavourite uid cid) - (CourseNoFavourite uid cid) - [] -- entry shouldn't exists, but keep it unchanged anyway - | otherwise -> pure () + cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh + now <- liftIO getCurrentTime + -- should never return FavouriteCurrent + newReason <- storedFavouriteReason tid ssh csh (Just authPair) <&> (\case + -- Maybe (Maybe reason, blacklist) + Nothing -> Just FavouriteManual + Just (_reason, True) -> Just FavouriteVisited + Just (Just FavouriteManual, False) -> Nothing + Just (_reason, False) -> Just FavouriteManual) + -- change stored reason in DB + case newReason of + (Just reason) -> do + void $ E.upsertBy + (UniqueCourseFavourite uid cid) + (CourseFavourite uid cid reason now) + [P.Update CourseFavouriteReason reason P.Assign] + E.deleteBy $ UniqueCourseNoFavourite uid cid + Nothing -> do + E.deleteBy $ UniqueCourseFavourite uid cid + void $ E.upsertBy + (UniqueCourseNoFavourite uid cid) + (CourseNoFavourite uid cid) + [] -- entry shouldn't exists, but keep it unchanged anyway -- show course page again redirect $ CourseR tid ssh csh CShowR