Listing books
This commit is contained in:
21
src/Database/Book.hs
Normal file
21
src/Database/Book.hs
Normal file
@ -0,0 +1,21 @@
|
||||
{-# Language TypeApplications #-}
|
||||
{-# Language DataKinds #-}
|
||||
module Database.Book (usersBooks, Book(..)) where
|
||||
|
||||
import ClassyPrelude
|
||||
import Database.Schema
|
||||
import Database
|
||||
import Database.Selda
|
||||
|
||||
usersBooks :: (MonadMask m, MonadIO m) => Username -> SeldaT m [Book]
|
||||
usersBooks username = fromRels <$> query q
|
||||
where
|
||||
q = do
|
||||
userId :*: _ :*: username' :*: _ <- select (gen users)
|
||||
userId' :*: bookHash' <- select (gen userBooks)
|
||||
book@(bookHash :*: _) <- select (gen books)
|
||||
restrict (bookHash .== bookHash')
|
||||
restrict (username' .== literal username)
|
||||
restrict (userId .== userId')
|
||||
return book
|
||||
|
@ -3,6 +3,7 @@
|
||||
module Database.Channel
|
||||
( userChannels
|
||||
, insertChannel
|
||||
, booksChannels
|
||||
, Channel(..) )
|
||||
where
|
||||
|
||||
@ -32,3 +33,13 @@ insertChannel username channel = do
|
||||
userId :*: _ :*: user :*: _ <- select (gen users)
|
||||
restrict (user .== literal username)
|
||||
return userId
|
||||
|
||||
booksChannels :: (MonadMask m, MonadIO m) => HashDigest -> SeldaT m [Channel]
|
||||
booksChannels contentHash = fromRels <$> query q
|
||||
where
|
||||
q = do
|
||||
channelId :*: contentHash' <- select (gen bookChannels)
|
||||
ch@(channelId' :*: _) <- select (gen channels)
|
||||
restrict (channelId .== channelId')
|
||||
restrict (contentHash' .== literal contentHash)
|
||||
return ch
|
||||
|
@ -83,15 +83,15 @@ instance SqlType HashDigest where
|
||||
books :: GenTable Book
|
||||
books = genTable "books" [ contentHash :- primaryGen ]
|
||||
|
||||
data UserBook = UserBook { email :: Text
|
||||
data UserBook = UserBook { user :: RowID
|
||||
, book :: HashDigest }
|
||||
deriving (Generic, Show)
|
||||
|
||||
userBooks :: GenTable UserBook
|
||||
userBooks = genTable "user_book" [ (email :: UserBook -> Text) :- fkGen (gen users) userEmail
|
||||
userBooks = genTable "user_book" [ (user :: UserBook -> RowID) :- fkGen (gen users) userId
|
||||
, (book :: UserBook -> HashDigest) :- fkGen (gen books) bookHash ]
|
||||
where
|
||||
_ :*: userEmail :*: _ = selectors (gen users)
|
||||
userId :*: _ = selectors (gen users)
|
||||
bookHash :*: _ = selectors (gen books)
|
||||
|
||||
-- | Categorizing books
|
||||
|
Reference in New Issue
Block a user