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.
44 lines
1.6 KiB
44 lines
1.6 KiB
-- Add description to kanban_cards and create checklist tables |
|
|
|
-- Add description column to kanban_cards if not exists |
|
ALTER TABLE kanban_cards ADD COLUMN IF NOT EXISTS description TEXT; |
|
|
|
-- Checklist items for kanban cards |
|
CREATE TABLE IF NOT EXISTS checklist_items ( |
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), |
|
card_id UUID REFERENCES kanban_cards(id) ON DELETE CASCADE, |
|
title TEXT NOT NULL, |
|
completed BOOLEAN DEFAULT false, |
|
position INTEGER NOT NULL, |
|
created_at TIMESTAMPTZ DEFAULT now() |
|
); |
|
|
|
-- Index for performance |
|
CREATE INDEX IF NOT EXISTS idx_checklist_items_card ON checklist_items(card_id); |
|
|
|
-- RLS |
|
ALTER TABLE checklist_items ENABLE ROW LEVEL SECURITY; |
|
|
|
-- Checklist items inherit card permissions (via board -> org membership) |
|
CREATE POLICY "Org members can view checklist items" ON checklist_items 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 om ON b.org_id = om.org_id |
|
WHERE c.id = checklist_items.card_id AND om.user_id = auth.uid() |
|
)); |
|
|
|
CREATE POLICY "Editors can manage checklist items" ON checklist_items FOR ALL |
|
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 om ON b.org_id = om.org_id |
|
WHERE c.id = checklist_items.card_id |
|
AND om.user_id = auth.uid() |
|
AND om.role IN ('owner', 'admin', 'editor') |
|
)); |
|
|
|
-- Enable realtime for checklist items |
|
ALTER PUBLICATION supabase_realtime ADD TABLE checklist_items;
|
|
|