-- v0 -> v10 (compatible with v3+): Latest revision

CREATE TABLE mx_registrations (
	user_id TEXT PRIMARY KEY
);

-- only: postgres
CREATE TYPE membership AS ENUM ('join', 'leave', 'invite', 'ban', 'knock');

CREATE TABLE mx_user_profile (
	room_id       TEXT,
	user_id       TEXT,
	membership    membership NOT NULL,
	displayname   TEXT       NOT NULL DEFAULT '',
	avatar_url    TEXT       NOT NULL DEFAULT '',

	name_skeleton bytea,

	PRIMARY KEY (room_id, user_id)
);

CREATE INDEX mx_user_profile_membership_idx ON mx_user_profile (room_id, membership);
CREATE INDEX mx_user_profile_name_skeleton_idx ON mx_user_profile (room_id, name_skeleton);

CREATE TABLE mx_room_state (
	room_id         TEXT PRIMARY KEY,
	power_levels    jsonb,
	encryption      jsonb,
	create_event    jsonb,
	join_rules      jsonb,
	members_fetched BOOLEAN NOT NULL DEFAULT false
);
