Introduces invite, verify, accept, resend, and revoke flows using team_members and invitation tokens, sends the branded invitation template, and requires account activation before team login. Co-authored-by: Cursor <cursoragent@cursor.com>
19 lines
856 B
SQL
19 lines
856 B
SQL
CREATE TABLE IF NOT EXISTS team_invitations (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
team_member_id BIGINT NOT NULL REFERENCES team_members(id) ON DELETE CASCADE,
|
|
token VARCHAR(128) NOT NULL UNIQUE,
|
|
status VARCHAR(20) NOT NULL DEFAULT 'pending' CHECK (
|
|
status IN ('pending', 'accepted', 'expired', 'revoked')
|
|
),
|
|
expires_at TIMESTAMPTZ NOT NULL,
|
|
invited_by BIGINT,
|
|
accepted_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_team_invitations_token ON team_invitations(token);
|
|
CREATE INDEX IF NOT EXISTS idx_team_invitations_team_member_id ON team_invitations(team_member_id);
|
|
CREATE INDEX IF NOT EXISTS idx_team_invitations_status ON team_invitations(status);
|
|
CREATE INDEX IF NOT EXISTS idx_team_invitations_expires_at ON team_invitations(expires_at);
|