DB: Visibility #3
This commit is contained in:
		
							
								
								
									
										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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user