Favourites are tracked, but not yet used

This commit is contained in:
SJost 2018-04-04 08:45:14 +02:00
parent 1bd645f25b
commit 2dde6c67bc
3 changed files with 21 additions and 2 deletions

1
models
View File

@ -69,6 +69,7 @@ CourseFavourite
user UserId
time UTCTime
course CourseId
UniqueCourseFavourite user course
Lecturer
userId UserId
courseId CourseId

2
routes
View File

@ -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

View File

@ -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 []