39 lines
1.5 KiB
MySQL
39 lines
1.5 KiB
MySQL
|
|
-- Create tablo_invitations table
|
||
|
|
CREATE TABLE IF NOT EXISTS tablo_invitations (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
tablo_id INTEGER NOT NULL,
|
||
|
|
invited_email VARCHAR(255) NOT NULL,
|
||
|
|
invited_by UUID NOT NULL,
|
||
|
|
status VARCHAR(20) NOT NULL DEFAULT 'pending',
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
|
||
|
|
-- Foreign key constraint to tablos table
|
||
|
|
CONSTRAINT fk_tablo_invitations_tablo_id
|
||
|
|
FOREIGN KEY (tablo_id) REFERENCES tablos(id) ON DELETE CASCADE,
|
||
|
|
|
||
|
|
-- Constraint to ensure status is one of the allowed values
|
||
|
|
CONSTRAINT tablo_invitations_status_check
|
||
|
|
CHECK (status IN ('pending', 'accepted', 'declined')),
|
||
|
|
|
||
|
|
-- Unique constraint to prevent duplicate invitations
|
||
|
|
CONSTRAINT unique_tablo_invitation
|
||
|
|
UNIQUE (tablo_id, invited_email)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Enable Row Level Security
|
||
|
|
ALTER TABLE tablo_invitations ENABLE ROW LEVEL SECURITY;
|
||
|
|
|
||
|
|
-- Create policy to allow tablo owners to insert invitations
|
||
|
|
CREATE POLICY "Tablo owners can insert invitations" ON tablo_invitations
|
||
|
|
FOR INSERT WITH CHECK (
|
||
|
|
auth.uid() = invited_by AND
|
||
|
|
EXISTS (
|
||
|
|
SELECT 1 FROM tablos
|
||
|
|
WHERE tablos.id = tablo_invitations.tablo_id
|
||
|
|
AND tablos.user_id = auth.uid()
|
||
|
|
)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Create index for better query performance
|
||
|
|
CREATE INDEX idx_tablo_invitations_tablo_id ON tablo_invitations(tablo_id);
|
||
|
|
CREATE INDEX idx_tablo_invitations_invited_email ON tablo_invitations(invited_email);
|