packages feed

espial-0.0.1: src/Handler/Edit.hs

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

module Handler.Edit where

import Database.Persist.Sql

import Import

-- routes

deleteDeleteR :: Int64 -> Handler Html
deleteDeleteR bid = do
  userId <- requireAuthId
  runDB $ do
    let k_bid = toSqlKey bid
    void $ requireResource userId k_bid
    deleteCascade k_bid
  pure ""

postReadR :: Int64 -> Handler Html
postReadR bid = do
  userId <- requireAuthId
  runDB $ do
    let k_bid = toSqlKey bid
    bm <- requireResource userId k_bid
    update k_bid [BookmarkToRead =. False]
  pure ""

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

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

-- common

_setSelected :: Int64 -> Bool -> Handler Html
_setSelected bid selected = do
  userId <- requireAuthId
  runDB $ do
    let k_bid = toSqlKey bid
    bm <- requireResource userId k_bid
    update k_bid [BookmarkSelected =. selected]
  pure ""

requireResource :: UserId -> Key Bookmark -> DBM Handler Bookmark
requireResource userId k_bid =
  get404 k_bid >>= \case
    bmark | bookmarkUserId bmark == userId -> pure bmark
    _ -> notFound

-- EditForm

data EditForm = EditForm {} deriving (Show, Eq, Read, Generic)

instance FromJSON EditForm

mkEditIForm
  :: MonadHandlerForm m
  => FormInput m EditForm
mkEditIForm = do
  pure EditForm