omega/migrations/009_user_invitations.sql
2026-09-02 22:42:23 +02:00

29 lines
1.2 KiB
SQL

CREATE TABLE user_invitations (
invitation_id CHAR(36) NOT NULL,
token_hash BINARY(32) NOT NULL,
iota_id BIGINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NULL,
state ENUM('pending', 'redeemed', 'revoked', 'expired') NOT NULL DEFAULT 'pending',
redeemed_user_id BIGINT NULL,
redeemed_at TIMESTAMP NULL,
revoked_at TIMESTAMP NULL,
PRIMARY KEY (invitation_id),
KEY idx_user_invitations_target_state (iota_id, state),
CONSTRAINT fk_user_invitations_iota
FOREIGN KEY (iota_id) REFERENCES iotas(id) ON DELETE CASCADE
);
CREATE TABLE pending_iota_user_provisioning (
user_id BIGINT NOT NULL,
iota_id BIGINT NOT NULL,
invitation_id CHAR(36) NOT NULL,
username VARBINARY(255) NOT NULL,
public_key BLOB NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id, iota_id),
CONSTRAINT fk_pending_iota_user_provisioning_iota
FOREIGN KEY (iota_id) REFERENCES iotas(id) ON DELETE CASCADE,
CONSTRAINT fk_pending_iota_user_provisioning_invitation
FOREIGN KEY (invitation_id) REFERENCES user_invitations(invitation_id) ON DELETE CASCADE
);