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

postReadR :: Int64 -> Handler Html
postReadR :: Int64 -> Handler Html
postReadR Int64
bid = do
  UserId
userId <- HandlerFor App UserId
HandlerFor App (AuthId (HandlerSite (HandlerFor App)))
forall (m :: * -> *).
(MonadHandler m, YesodAuth (HandlerSite m)) =>
m (AuthId (HandlerSite m))
requireAuthId
  YesodDB App () -> HandlerFor App ()
forall a. YesodDB App a -> HandlerFor App a
forall site a.
YesodPersist site =>
YesodDB site a -> HandlerFor site a
runDB do
    let k_bid :: Key Bookmark
k_bid = Int64 -> Key Bookmark
forall record.
ToBackendKey SqlBackend record =>
Int64 -> Key record
toSqlKey Int64
bid
    Bookmark
_ <- UserId -> Key Bookmark -> DBM (HandlerFor App) Bookmark
requireResource UserId
userId Key Bookmark
k_bid
    Key Bookmark
-> [Update Bookmark] -> ReaderT SqlBackend (HandlerFor App) ()
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
forall record (m :: * -> *).
(MonadIO m, PersistRecordBackend record SqlBackend) =>
Key record -> [Update record] -> ReaderT SqlBackend m ()
update Key Bookmark
k_bid [EntityField Bookmark Bool
forall typ. (typ ~ Bool) => EntityField Bookmark typ
BookmarkToRead EntityField Bookmark Bool -> Bool -> Update Bookmark
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Bool
False]
  Html -> Handler Html
forall a. a -> HandlerFor App a
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 <- HandlerFor App UserId
HandlerFor App (AuthId (HandlerSite (HandlerFor App)))
forall (m :: * -> *).
(MonadHandler m, YesodAuth (HandlerSite m)) =>
m (AuthId (HandlerSite m))
requireAuthId
  YesodDB App () -> HandlerFor App ()
forall a. YesodDB App a -> HandlerFor App a
forall site a.
YesodPersist site =>
YesodDB site a -> HandlerFor site a
runDB do
    let k_bid :: Key Bookmark
k_bid = Int64 -> Key Bookmark
forall record.
ToBackendKey SqlBackend record =>
Int64 -> Key record
toSqlKey Int64
bid
    Bookmark
bm <- UserId -> Key Bookmark -> DBM (HandlerFor App) Bookmark
requireResource UserId
userId Key Bookmark
k_bid
    Key Bookmark
-> [Update Bookmark] -> ReaderT SqlBackend (HandlerFor App) ()
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
forall record (m :: * -> *).
(MonadIO m, PersistRecordBackend record SqlBackend) =>
Key record -> [Update record] -> ReaderT SqlBackend m ()
update Key Bookmark
k_bid [EntityField Bookmark Bool
forall typ. (typ ~ Bool) => EntityField Bookmark typ
BookmarkSelected EntityField Bookmark Bool -> Bool -> Update Bookmark
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Bool
selected]
  Html -> Handler Html
forall a. a -> HandlerFor App a
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 <- Key Bookmark -> SqlPersistT (HandlerFor App) Bookmark
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 UserId -> UserId -> Bool
forall a. Eq a => a -> a -> Bool
== Bookmark -> UserId
bookmarkUserId Bookmark
bmark
    then Bookmark -> SqlPersistT (HandlerFor App) Bookmark
forall a. a -> ReaderT SqlBackend (HandlerFor App) a
forall (m :: * -> *) a. Monad m => a -> m a
return Bookmark
bmark
    else SqlPersistT (HandlerFor App) Bookmark
forall (m :: * -> *) a. MonadHandler m => m a
notFound