Attaching tags
This commit is contained in:
parent
cae136d38d
commit
100c9e3ee3
@ -2,9 +2,11 @@
|
|||||||
{-# Language TypeOperators #-}
|
{-# Language TypeOperators #-}
|
||||||
{-# Language DataKinds #-}
|
{-# Language DataKinds #-}
|
||||||
{-# Language DuplicateRecordFields #-}
|
{-# Language DuplicateRecordFields #-}
|
||||||
|
{-# Language NamedFieldPuns #-}
|
||||||
module Database.Tag
|
module Database.Tag
|
||||||
( def
|
( def
|
||||||
, booksTags
|
, booksTags
|
||||||
|
, attachTag
|
||||||
, upsertTag
|
, upsertTag
|
||||||
, Tag(..) ) where
|
, Tag(..) ) where
|
||||||
|
|
||||||
@ -12,6 +14,7 @@ import ClassyPrelude
|
|||||||
import Database.Schema
|
import Database.Schema
|
||||||
import Database
|
import Database
|
||||||
import Database.Selda
|
import Database.Selda
|
||||||
|
import Database.Selda.Generic
|
||||||
|
|
||||||
upsertTag :: (MonadMask m, MonadIO m, MonadSelda m) => Username -> Text -> m Tag
|
upsertTag :: (MonadMask m, MonadIO m, MonadSelda m) => Username -> Text -> m Tag
|
||||||
upsertTag username tag = transaction $ do
|
upsertTag username tag = transaction $ do
|
||||||
@ -41,3 +44,14 @@ booksTags bookId = fromRels <$> query q
|
|||||||
restrict (tagId .== tagId')
|
restrict (tagId .== tagId')
|
||||||
restrict (bookId' .== literal bookId)
|
restrict (bookId' .== literal bookId)
|
||||||
return tag
|
return tag
|
||||||
|
|
||||||
|
attachTag :: (MonadMask m, MonadIO m, MonadSelda m) => Username -> BookID -> Text -> m ()
|
||||||
|
attachTag username bookId tag = transaction $ do
|
||||||
|
Tag{identifier} <- upsertTag username tag
|
||||||
|
unlessM (null <$> query (tagQ identifier)) $
|
||||||
|
void $ insertGen bookTags [BookTag identifier bookId]
|
||||||
|
where
|
||||||
|
tagQ tagId = do
|
||||||
|
(tagId' :*: bookId') <- select (gen bookTags)
|
||||||
|
restrict (tagId' .== literal tagId .&& bookId' .== literal bookId)
|
||||||
|
return tagId'
|
||||||
|
Loading…
Reference in New Issue
Block a user