-- Create tasks table CREATE TABLE IF NOT EXISTS tasks ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, kr_id UUID NOT NULL REFERENCES krs(id) ON DELETE CASCADE, title TEXT NOT NULL, description TEXT, -- 思路 status TEXT NOT NULL DEFAULT 'todo', -- todo, in_progress, expected, done priority INTEGER DEFAULT 50, -- 重要级 0-100 urgency INTEGER DEFAULT 50, -- 紧急程度 0-100 owner_user_id UUID REFERENCES users(id), -- 负责人 executor_ids UUID[] DEFAULT '{}', -- 执行人列表 start_date DATE, end_date DATE, created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL, updated_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL ); -- Create task_steps table CREATE TABLE IF NOT EXISTS task_steps ( id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, task_id UUID NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, content TEXT NOT NULL, note TEXT, executor_id UUID REFERENCES users(id), start_date DATE, end_date DATE, is_completed BOOLEAN DEFAULT FALSE, created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL ); -- Add indexes CREATE INDEX IF NOT EXISTS idx_tasks_kr_id ON tasks(kr_id); CREATE INDEX IF NOT EXISTS idx_task_steps_task_id ON task_steps(task_id); -- Enable RLS ALTER TABLE tasks ENABLE ROW LEVEL SECURITY; ALTER TABLE task_steps ENABLE ROW LEVEL SECURITY; -- RLS Policies for tasks CREATE POLICY "Users can view tasks of visible KRs" ON tasks FOR SELECT USING ( EXISTS ( SELECT 1 FROM krs WHERE krs.id = tasks.kr_id AND ( -- KR visibility logic (simplified for now: if you can see the project, you can see the KR) EXISTS ( SELECT 1 FROM projects WHERE projects.id = krs.project_id ) ) ) ); CREATE POLICY "Users can insert tasks" ON tasks FOR INSERT WITH CHECK (true); -- Allow all authenticated users to create tasks for now CREATE POLICY "Users can update tasks" ON tasks FOR UPDATE USING (true); CREATE POLICY "Users can delete tasks" ON tasks FOR DELETE USING (true); -- RLS Policies for task_steps CREATE POLICY "Users can view steps" ON task_steps FOR SELECT USING (true); CREATE POLICY "Users can insert steps" ON task_steps FOR INSERT WITH CHECK (true); CREATE POLICY "Users can update steps" ON task_steps FOR UPDATE USING (true); CREATE POLICY "Users can delete steps" ON task_steps FOR DELETE USING (true);