DB: Visibility #3
This commit is contained in:
parent
8b04f3760e
commit
00a7e3d524
1
migrations/V1.1__Channel_visibility.sql
Normal file
1
migrations/V1.1__Channel_visibility.sql
Normal file
@ -0,0 +1 @@
|
||||
alter table channels add column visibility text NOT NULL default 'Private';
|
@ -22,7 +22,7 @@ userChannels username = fromRels <$> query q
|
||||
where
|
||||
q = do
|
||||
userId :*: _ :*: username' :*: _ <- select (gen users)
|
||||
channel@(_ :*: _ :*: owner) <- select (gen channels)
|
||||
channel@(_ :*: _ :*: owner :*: _) <- select (gen channels)
|
||||
restrict (owner .== userId)
|
||||
restrict (username' .== literal username)
|
||||
return channel
|
||||
@ -31,9 +31,9 @@ insertChannel :: (MonadMask m, MonadIO m) => Username -> Text -> SeldaT m ()
|
||||
insertChannel username channel = do
|
||||
mUserId <- listToMaybe <$> getUser
|
||||
void $ forM mUserId $ \userId ->
|
||||
insertUnless (gen channels) (doesNotExist userId) [ def :*: channel :*: userId ]
|
||||
insertUnless (gen channels) (doesNotExist userId) [ def :*: channel :*: userId :*: def ]
|
||||
where
|
||||
doesNotExist userId (_ :*: channel' :*: userId') = channel' .== literal channel .&& userId' .== literal userId
|
||||
doesNotExist userId (_ :*: channel' :*: userId' :*: _) = channel' .== literal channel .&& userId' .== literal userId
|
||||
getUser = query $ do
|
||||
userId :*: _ :*: user :*: _ <- select (gen users)
|
||||
restrict (user .== literal username)
|
||||
@ -62,7 +62,7 @@ attachChannel username bookId channel = do
|
||||
return channelId'
|
||||
channelQ = do
|
||||
userId :*: _ :*: username' :*: _ <- select (gen users)
|
||||
ch@(_ :*: channel' :*: owner) <- select (gen channels)
|
||||
ch@(_ :*: channel' :*: owner :*: _) <- select (gen channels)
|
||||
restrict (username' .== literal username)
|
||||
restrict (owner .== userId)
|
||||
restrict (channel' .== literal channel)
|
||||
|
@ -124,9 +124,19 @@ data Tag = Tag { identifier :: TagID
|
||||
, owner :: UserID }
|
||||
deriving (Show, Generic)
|
||||
|
||||
data Visibility = Public | Private | Followers
|
||||
deriving (Show, Read, Generic)
|
||||
|
||||
instance SqlType Visibility where
|
||||
mkLit = LCustom . LText . pack . show
|
||||
fromSql (SqlString x) = fromMaybe (error "fromSql: Not a valid visibility token") . readMay . unpack $ x
|
||||
fromSql _ = error "fromSql: Not a valid visibility token"
|
||||
defaultValue = mkLit Private
|
||||
|
||||
data Channel = Channel { identifier :: ChannelID
|
||||
, channel :: Text
|
||||
, owner :: UserID }
|
||||
, owner :: UserID
|
||||
, visibility :: Visibility }
|
||||
deriving (Show, Generic)
|
||||
|
||||
tags :: GenTable Tag
|
||||
|
Loading…
Reference in New Issue
Block a user