mirror of
https://github.com/block/buzz.git
synced 2026-10-27 12:40:30 +00:00
33 lines
1.6 KiB
SQL
33 lines
1.6 KiB
SQL
-- ── Users ─────────────────────────────────────────────────────────────────────
|
|
-- Conformance: "Users, profiles, NIP-05, and user search". One profile per
|
|
-- (community, pubkey): the same key reposts kind:0 in each community it joins.
|
|
|
|
CREATE TABLE users (
|
|
community_id UUID NOT NULL REFERENCES communities(id),
|
|
pubkey BYTEA NOT NULL,
|
|
nip05_handle VARCHAR(255),
|
|
display_name VARCHAR(255),
|
|
avatar_url TEXT,
|
|
about TEXT,
|
|
agent_type VARCHAR(255),
|
|
capabilities JSONB,
|
|
okta_user_id VARCHAR(255),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
deactivated_at TIMESTAMPTZ,
|
|
metadata_event_id BYTEA,
|
|
agent_owner_pubkey BYTEA,
|
|
channel_add_policy channel_add_policy NOT NULL DEFAULT 'anyone',
|
|
PRIMARY KEY (community_id, pubkey),
|
|
CONSTRAINT chk_users_pubkey_len CHECK (LENGTH(pubkey) = 32),
|
|
-- agent owner is a user in the SAME community.
|
|
FOREIGN KEY (community_id, agent_owner_pubkey)
|
|
REFERENCES users (community_id, pubkey) ON DELETE SET NULL
|
|
);
|
|
|
|
-- NIP-05 handle and Okta id unique within a community, not globally.
|
|
CREATE UNIQUE INDEX idx_users_nip05 ON users (community_id, lower(nip05_handle))
|
|
WHERE nip05_handle IS NOT NULL;
|
|
CREATE UNIQUE INDEX idx_users_okta ON users (community_id, okta_user_id)
|
|
WHERE okta_user_id IS NOT NULL;
|