38 lines
1.1 KiB
SQL
38 lines
1.1 KiB
SQL
create type account_role as enum ('user', 'admin');
|
|
|
|
create table accounts (
|
|
id text primary key,
|
|
username text not null,
|
|
email text not null,
|
|
password text not null, -- Hashed + salted password
|
|
role account_role not null default 'user',
|
|
|
|
avatar text null -- Avatar hash
|
|
);
|
|
|
|
create unique index users_username_idx on accounts (lower(username));
|
|
|
|
create type instance_status as enum ('active', 'suspended');
|
|
|
|
create table chat_instances (
|
|
id text primary key,
|
|
domain text not null unique,
|
|
public_key text not null,
|
|
status instance_status not null default 'active',
|
|
reason text
|
|
);
|
|
|
|
create table chat_instance_accounts (
|
|
account_id text not null references accounts (id) on delete cascade,
|
|
chat_instance_id text not null references chat_instances (id) on delete cascade,
|
|
|
|
primary key (account_id, chat_instance_id)
|
|
);
|
|
|
|
create table instance (
|
|
id integer not null primary key default 1,
|
|
public_key text not null,
|
|
private_key text not null,
|
|
|
|
constraint singleton check (id = 1)
|
|
);
|