xtablo-source/sql/09_create_tablo_invitations_table.sql

39 lines
1.5 KiB
MySQL
Raw Normal View History

2025-07-01 20:28:49 +00:00
-- 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);