31 lines
1.0 KiB
SQL
31 lines
1.0 KiB
SQL
-- Invites table for invite-only registration
|
|
CREATE TABLE IF NOT EXISTS invites (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
token UUID UNIQUE NOT NULL DEFAULT gen_random_uuid(),
|
|
email TEXT NOT NULL,
|
|
created_by UUID REFERENCES auth.users(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
expires_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() + INTERVAL '7 days'),
|
|
used_at TIMESTAMPTZ,
|
|
used_by UUID REFERENCES auth.users(id) ON DELETE SET NULL
|
|
);
|
|
|
|
-- Enable RLS (all access goes through service role key in API routes)
|
|
ALTER TABLE invites ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Admins can read invites they created
|
|
CREATE POLICY "admins_read_invites" ON invites
|
|
FOR SELECT USING (
|
|
EXISTS (
|
|
SELECT 1 FROM profiles
|
|
WHERE profiles.id = auth.uid()
|
|
AND profiles.role = 'admin'
|
|
)
|
|
);
|
|
|
|
-- Index for token lookups (invite acceptance)
|
|
CREATE INDEX IF NOT EXISTS invites_token_idx ON invites (token);
|
|
|
|
-- Index for listing by creator
|
|
CREATE INDEX IF NOT EXISTS invites_created_by_idx ON invites (created_by);
|