35 lines
1.2 KiB
SQL
35 lines
1.2 KiB
SQL
-- Create tablos table
|
|
CREATE TABLE IF NOT EXISTS tablos (
|
|
id SERIAL PRIMARY KEY,
|
|
owner_id UUID NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
image TEXT,
|
|
color VARCHAR(50),
|
|
status VARCHAR(20) NOT NULL DEFAULT 'todo',
|
|
position INTEGER NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
deleted_at TIMESTAMP WITH TIME ZONE DEFAULT NULL,
|
|
|
|
-- Constraint to ensure status is one of the allowed values
|
|
CONSTRAINT tablos_status_check CHECK (status IN ('todo', 'in_progress', 'done'))
|
|
);
|
|
|
|
-- Enable Row Level Security
|
|
ALTER TABLE tablos ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Create policy to allow users to see only their own tablos
|
|
CREATE POLICY "Users can view tablos they have access to" ON tablos
|
|
FOR SELECT USING (
|
|
(SELECT auth.uid()) = owner_id
|
|
OR EXISTS (
|
|
SELECT 1 FROM tablo_access WHERE tablo_id = tablos.id AND user_id = auth.uid()
|
|
)
|
|
);
|
|
|
|
-- Create policy to allow users to insert their own tablos
|
|
CREATE POLICY "Users can insert own tablos" ON tablos
|
|
FOR INSERT WITH CHECK (auth.uid() = owner_id);
|
|
|
|
-- Create policy to allow users to update their own tablos
|
|
CREATE POLICY "Users can update own tablos" ON tablos
|
|
FOR UPDATE USING (auth.uid() = owner_id);
|