pronounss/scripts/migrate/001_init.sql
2023-01-04 22:41:29 +01:00

91 lines
2.7 KiB
SQL

-- +migrate Up
-- 2022-05-02: initial schema
create table users (
id text primary key,
username text not null unique,
display_name text,
bio text,
avatar_urls text[],
links text[],
discord text unique, -- for Discord oauth
discord_username text,
max_invites int not null default 10
);
create table user_names (
user_id text not null references users (id) on delete cascade,
id bigserial primary key, -- ID is used for sorting; when order changes, existing rows are deleted and new ones are created
name text not null,
status int not null
);
create table user_pronouns (
user_id text not null references users (id) on delete cascade,
id bigserial primary key,
display_text text, -- if unset, falls back to first 2 parts of pronouns
pronouns text not null,
status int not null
);
create table user_fields (
user_id text not null references users (id) on delete cascade,
id bigserial primary key,
name text not null,
favourite text[],
okay text[],
jokingly text[],
friends_only text[],
avoid text[]
);
create table members (
id text primary key,
user_id text not null references users (id) on delete cascade,
name text not null,
bio text,
avatar_urls text[],
links text[]
);
create unique index members_user_name_idx on members (user_id, lower(name));
create table member_names (
member_id text not null references members (id) on delete cascade,
id bigserial primary key, -- ID is used for sorting; when order changes, existing rows are deleted and new ones are created
name text not null,
status int not null
);
create table member_pronouns (
member_id text not null references members (id) on delete cascade,
id bigserial primary key,
display_text text, -- if unset, falls back to first 2 parts of pronouns
pronouns text not null,
status int not null
);
create table member_fields (
member_id text not null references members (id) on delete cascade,
id bigserial primary key,
name text not null,
favourite text[],
okay text[],
jokingly text[],
friends_only text[],
avoid text[]
);
create table invites (
user_id text not null references users (id) on delete cascade,
code text primary key,
created timestamp not null default (current_timestamp at time zone 'utc'),
used boolean not null default false
);