1+ -- Create tasks table for CodinIT.dev task management
2+ -- This table stores background tasks with progress tracking and logs
3+
4+ CREATE TABLE IF NOT EXISTS tasks (
5+ id TEXT PRIMARY KEY ,
6+ user_id TEXT REFERENCES auth .users (id) ON DELETE CASCADE ,
7+ status TEXT NOT NULL CHECK (status IN (' pending' , ' processing' , ' completed' , ' error' )) DEFAULT ' pending' ,
8+ progress INTEGER NOT NULL DEFAULT 0 CHECK (progress >= 0 AND progress <= 100 ),
9+ prompt TEXT NOT NULL ,
10+ repo_url TEXT ,
11+ selected_agent TEXT DEFAULT ' claude' ,
12+ selected_model TEXT ,
13+ sandbox_url TEXT ,
14+ branch_name TEXT ,
15+ logs TEXT DEFAULT ' []' , -- JSON array of log entries
16+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
17+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
18+ );
19+
20+ -- Create indexes for better query performance
21+ CREATE INDEX IF NOT EXISTS idx_tasks_user_id ON tasks(user_id);
22+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
23+ CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at DESC );
24+ CREATE INDEX IF NOT EXISTS idx_tasks_user_status ON tasks(user_id, status);
25+
26+ -- Create updated_at trigger to automatically update the timestamp
27+ CREATE OR REPLACE FUNCTION update_updated_at_column ()
28+ RETURNS TRIGGER AS $$
29+ BEGIN
30+ NEW .updated_at = NOW();
31+ RETURN NEW;
32+ END;
33+ $$ language ' plpgsql' ;
34+
35+ CREATE TRIGGER update_tasks_updated_at
36+ BEFORE UPDATE ON tasks
37+ FOR EACH ROW
38+ EXECUTE FUNCTION update_updated_at_column();
39+
40+ -- Enable Row Level Security (RLS)
41+ ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
42+
43+ -- Create RLS policies
44+ -- Users can only see their own tasks
45+ CREATE POLICY " Users can view their own tasks"
46+ ON tasks
47+ FOR SELECT
48+ USING (auth .uid () = user_id::uuid);
49+
50+ -- Users can only insert their own tasks
51+ CREATE POLICY " Users can insert their own tasks"
52+ ON tasks
53+ FOR INSERT
54+ WITH CHECK (auth .uid () = user_id::uuid);
55+
56+ -- Users can only update their own tasks
57+ CREATE POLICY " Users can update their own tasks"
58+ ON tasks
59+ FOR UPDATE
60+ USING (auth .uid () = user_id::uuid);
61+
62+ -- Users can only delete their own tasks
63+ CREATE POLICY " Users can delete their own tasks"
64+ ON tasks
65+ FOR DELETE
66+ USING (auth .uid () = user_id::uuid);
67+
68+ -- Grant necessary permissions
69+ GRANT ALL ON tasks TO authenticated;
70+ GRANT ALL ON tasks TO service_role;
0 commit comments