From 2dde6c67bc97e81d8706d5c3330ccd543d838f22 Mon Sep 17 00:00:00 2001 From: SJost Date: Wed, 4 Apr 2018 08:45:14 +0200 Subject: [PATCH] Favourites are tracked, but not yet used --- models | 1 + routes | 2 +- src/Foundation.hs | 20 +++++++++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/models b/models index f56b467b2..6289a312f 100644 --- a/models +++ b/models @@ -69,6 +69,7 @@ CourseFavourite user UserId time UTCTime course CourseId + UniqueCourseFavourite user course Lecturer userId UserId courseId CourseId diff --git a/routes b/routes index d8d4010e7..075a60fd4 100644 --- a/routes +++ b/routes @@ -15,7 +15,7 @@ /course/ CourseListR GET !/course/new CourseNewR GET POST !lecturerAny !/course/#TermId CourseListTermR GET -/course/#TermId/#Text CourseR: +/course/#TermId/#Text CourseR !updateFavourite: /show CourseShowR GET POST /edit CourseEditR GET POST !lecturer diff --git a/src/Foundation.hs b/src/Foundation.hs index 221ccbaa4..1241a847d 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -48,12 +48,14 @@ import Data.Conduit (($$)) import Data.Conduit.List (sourceList) import Control.Monad.Except (MonadError(..), runExceptT) +import Control.Monad.Trans.Maybe (MaybeT(..)) import System.FilePath import Handler.Utils.Templates import Handler.Utils.StudyFeatures + -- infixl 9 :$: -- pattern a :$: b = a b @@ -144,7 +146,23 @@ instance Yesod UniWorX where -- b) Validates that incoming write requests include that token in either a header or POST parameter. -- To add it, chain it together with the defaultMiddleware: yesodMiddleware = defaultYesodMiddleware . defaultCsrfMiddleware -- For details, see the CSRF documentation in the Yesod.Core.Handler module of the yesod-core package. - yesodMiddleware = defaultYesodMiddleware + yesodMiddleware handler = do + res <- defaultYesodMiddleware handler + void . runMaybeT $ do + route@(routeAttrs -> attrs) <- MaybeT getCurrentRoute + case route of + CourseR tid csh _ | "updateFavourite" `elem` attrs -> do + uid <- MaybeT maybeAuthId + now <- liftIO $ getCurrentTime + void . lift . runDB . runMaybeT $ do + cid <- MaybeT . getKeyBy $ CourseTermShort tid csh + lift $ upsertBy + (UniqueCourseFavourite uid cid) + (CourseFavourite uid now cid) + [CourseFavouriteTime =. now] + + _other -> return () + return res defaultLayout = defaultLinkLayout []