{-# OPTIONS_GHC -fno-warn-unused-matches #-}

module Handler.Edit where

import Database.Persist.Sql

import Import

-- routes

deleteDeleteR :: Int64 -> Handler Html
deleteDeleteR :: Int64 -> Handler Html
deleteDeleteR Int64
bid = do
  UserId
userId <- forall (m :: * -> *).
(MonadHandler m, YesodAuth (HandlerSite m)) =>
m (AuthId (HandlerSite m))
requireAuthId
  forall site a.
YesodPersist site =>
YesodDB site a -> HandlerFor site a
runDB do
    let k_bid :: Key Bookmark
k_bid = Int64 -> Key Bookmark
BookmarkKey Int64
bid
    Bookmark
_ <- UserId -> Key Bookmark -> DBM (HandlerFor App) Bookmark
requireResource UserId
userId Key Bookmark
k_bid
    forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m ()
delete Key Bookmark
k_bid
  forall (m :: * -> *) a. Monad m => a -> m a
return Html
""

postReadR :: Int64 -> Handler Html
postReadR :: Int64 -> Handler Html
postReadR Int64
bid = do
  UserId
userId <- forall (m :: * -> *).
(MonadHandler m, YesodAuth (HandlerSite m)) =>
m (AuthId (HandlerSite m))
requireAuthId
  forall site a.
YesodPersist site =>
YesodDB site a -> HandlerFor site a
runDB do
    let k_bid :: Key Bookmark
k_bid = Int64 -> Key Bookmark
BookmarkKey Int64
bid
    Bookmark
_ <- UserId -> Key Bookmark -> DBM (HandlerFor App) Bookmark
requireResource UserId
userId Key Bookmark
k_bid
    forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
update Key Bookmark
k_bid [forall typ. (typ ~ Bool) => EntityField Bookmark typ
BookmarkToRead forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Bool
False]
  forall (m :: * -> *) a. Monad m => a -> m a
return Html
""

postStarR :: Int64 -> Handler Html
postStarR :: Int64 -> Handler Html
postStarR Int64
bid = Int64 -> Bool -> Handler Html
_setSelected Int64
bid Bool
True

postUnstarR :: Int64 -> Handler Html
postUnstarR :: Int64 -> Handler Html
postUnstarR Int64
bid = Int64 -> Bool -> Handler Html
_setSelected Int64
bid Bool
False

-- common

_setSelected :: Int64 -> Bool -> Handler Html
_setSelected :: Int64 -> Bool -> Handler Html
_setSelected Int64
bid Bool
selected = do
  UserId
userId <- forall (m :: * -> *).
(MonadHandler m, YesodAuth (HandlerSite m)) =>
m (AuthId (HandlerSite m))
requireAuthId
  forall site a.
YesodPersist site =>
YesodDB site a -> HandlerFor site a
runDB do
    let k_bid :: Key Bookmark
k_bid = Int64 -> Key Bookmark
BookmarkKey Int64
bid
    Bookmark
bm <- UserId -> Key Bookmark -> DBM (HandlerFor App) Bookmark
requireResource UserId
userId Key Bookmark
k_bid
    forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
update Key Bookmark
k_bid [forall typ. (typ ~ Bool) => EntityField Bookmark typ
BookmarkSelected forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Bool
selected]
  forall (f :: * -> *) a. Applicative f => a -> f a
pure Html
""

requireResource :: UserId -> Key Bookmark -> DBM Handler Bookmark
requireResource :: UserId -> Key Bookmark -> DBM (HandlerFor App) Bookmark
requireResource UserId
userId Key Bookmark
k_bid = do
  Bookmark
bmark <- forall (m :: * -> *) backend val.
(MonadIO m, PersistStoreRead backend,
 PersistRecordBackend val backend) =>
Key val -> ReaderT backend m val
get404 Key Bookmark
k_bid
  if UserId
userId forall a. Eq a => a -> a -> Bool
== Bookmark -> UserId
bookmarkUserId Bookmark
bmark
    then forall (m :: * -> *) a. Monad m => a -> m a
return Bookmark
bmark
    else forall (m :: * -> *) a. MonadHandler m => m a
notFound