From 5dac8374fdb68790ce3a005195c37efd37d5df95 Mon Sep 17 00:00:00 2001 From: Mats Rauhala Date: Tue, 7 Aug 2018 22:27:05 +0300 Subject: [PATCH] Move the book to have an id as well --- src/API/Books.hs | 4 ++-- src/Database/Channel.hs | 2 +- src/Database/Schema.hs | 17 +++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/API/Books.hs b/src/API/Books.hs index fff02d3..d9e4d8e 100644 --- a/src/API/Books.hs +++ b/src/API/Books.hs @@ -49,6 +49,6 @@ listBooksHandler :: AuthResult SafeUser -> AppM [JsonBook] listBooksHandler = requireLoggedIn $ \user -> do runDB (usersBooks (view (field @"username") user) >>= mapM augment) where - augment Book{..} = do - channels <- fmap (\Channel{..} -> JsonChannel{..}) <$> booksChannels contentHash + augment Book{identifier=bookId,..} = do + channels <- fmap (\Channel{..} -> JsonChannel{..}) <$> booksChannels bookId pure JsonBook{..} diff --git a/src/Database/Channel.hs b/src/Database/Channel.hs index 64cd21f..6e0b604 100644 --- a/src/Database/Channel.hs +++ b/src/Database/Channel.hs @@ -34,7 +34,7 @@ insertChannel username channel = do restrict (user .== literal username) return userId -booksChannels :: (MonadMask m, MonadIO m) => HashDigest -> SeldaT m [Channel] +booksChannels :: (MonadMask m, MonadIO m) => BookID -> SeldaT m [Channel] booksChannels contentHash = fromRels <$> query q where q = do diff --git a/src/Database/Schema.hs b/src/Database/Schema.hs index 861cabe..aa498ad 100644 --- a/src/Database/Schema.hs +++ b/src/Database/Schema.hs @@ -97,7 +97,8 @@ users = genTable "users" [ (email :: User HashedPassword -> Email) :- uniqueGen -- | Book type newtype HashDigest = HashDigest { unHex :: Text } deriving Show -- XXX: Add an identifier for the book -data Book = Book { contentHash :: HashDigest +data Book = Book { identifier :: BookID + , contentHash :: HashDigest , contentType :: Text , title :: Maybe Text , description :: Maybe Text } @@ -110,15 +111,15 @@ instance SqlType HashDigest where defaultValue = mkLit (HashDigest "") -- Doesn't really make sense books :: GenTable Book -books = genTable "books" [ contentHash :- primaryGen ] +books = genTable "books" [ (identifier :: Book -> BookID) :- primaryGen ] data UserBook = UserBook { user :: UserID - , book :: HashDigest } + , book :: BookID } deriving (Generic, Show) userBooks :: GenTable UserBook userBooks = genTable "user_book" [ (user :: UserBook -> UserID) :- fkGen (gen users) userId - , (book :: UserBook -> HashDigest) :- fkGen (gen books) bookHash ] + , (book :: UserBook -> BookID) :- fkGen (gen books) bookHash ] where userId :*: _ = selectors (gen users) bookHash :*: _ = selectors (gen books) @@ -147,23 +148,23 @@ channels = genTable "channels" [ (identifier :: Channel -> ChannelID) :- autoPri i :*: _ = selectors (gen users) data BookTag = BookTag { tag :: TagID - , book :: HashDigest } + , book :: BookID } deriving (Show, Generic) data BookChannel = BookChannel { channel :: ChannelID - , book :: HashDigest } + , book :: BookID } deriving (Show, Generic) bookTags :: GenTable BookTag bookTags = genTable "book_tags" [ (tag :: BookTag -> TagID) :- fkGen (gen tags) i - , (book :: BookTag -> HashDigest) :- fkGen (gen books) h ] + , (book :: BookTag -> BookID) :- fkGen (gen books) h ] where i :*: _ = selectors (gen tags) h :*: _ = selectors (gen books) bookChannels :: GenTable BookChannel bookChannels = genTable "book_channels" [ (channel :: BookChannel -> ChannelID) :- fkGen (gen channels) i - , (book :: BookChannel -> HashDigest) :- fkGen (gen books) h ] + , (book :: BookChannel -> BookID) :- fkGen (gen books) h ] where i :*: _ = selectors (gen channels) h :*: _ = selectors (gen books)