Listing books

This commit is contained in:
2018-08-05 23:42:37 +03:00
parent f8f35007bf
commit 46c728c3c8
6 changed files with 90 additions and 4 deletions

21
src/Database/Book.hs Normal file
View 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

View File

@ -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

View File

@ -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