You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.0 KiB
53 lines
2.0 KiB
-- Task comments for kanban cards |
|
|
|
CREATE TABLE IF NOT EXISTS kanban_comments ( |
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), |
|
card_id UUID NOT NULL REFERENCES kanban_cards(id) ON DELETE CASCADE, |
|
user_id UUID NOT NULL REFERENCES profiles(id) ON DELETE CASCADE, |
|
content TEXT NOT NULL, |
|
created_at TIMESTAMPTZ DEFAULT now(), |
|
updated_at TIMESTAMPTZ DEFAULT now() |
|
); |
|
|
|
-- Enable RLS |
|
ALTER TABLE kanban_comments ENABLE ROW LEVEL SECURITY; |
|
|
|
-- Comments inherit access from the card's board -> org |
|
CREATE POLICY "Comments inherit card access" ON kanban_comments |
|
FOR SELECT USING ( |
|
EXISTS ( |
|
SELECT 1 FROM kanban_cards c |
|
JOIN kanban_columns col ON c.column_id = col.id |
|
JOIN kanban_boards b ON col.board_id = b.id |
|
JOIN org_members m ON b.org_id = m.org_id |
|
WHERE c.id = kanban_comments.card_id |
|
AND m.user_id = auth.uid() |
|
) |
|
); |
|
|
|
-- Users can insert their own comments |
|
CREATE POLICY "Users can insert own comments" ON kanban_comments |
|
FOR INSERT WITH CHECK ( |
|
user_id = auth.uid() AND |
|
EXISTS ( |
|
SELECT 1 FROM kanban_cards c |
|
JOIN kanban_columns col ON c.column_id = col.id |
|
JOIN kanban_boards b ON col.board_id = b.id |
|
JOIN org_members m ON b.org_id = m.org_id |
|
WHERE c.id = kanban_comments.card_id |
|
AND m.user_id = auth.uid() |
|
) |
|
); |
|
|
|
-- Users can update their own comments |
|
CREATE POLICY "Users can update own comments" ON kanban_comments |
|
FOR UPDATE USING (user_id = auth.uid()); |
|
|
|
-- Users can delete their own comments |
|
CREATE POLICY "Users can delete own comments" ON kanban_comments |
|
FOR DELETE USING (user_id = auth.uid()); |
|
|
|
-- Index for faster lookups |
|
CREATE INDEX IF NOT EXISTS idx_kanban_comments_card ON kanban_comments(card_id); |
|
CREATE INDEX IF NOT EXISTS idx_kanban_comments_user ON kanban_comments(user_id); |
|
CREATE INDEX IF NOT EXISTS idx_kanban_comments_created ON kanban_comments(created_at DESC);
|
|
|