57 lines
1.8 KiB
SQL
57 lines
1.8 KiB
SQL
CREATE TABLE users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
username VARCHAR(32) UNIQUE NOT NULL,
|
|
display_name VARCHAR(64) NOT NULL,
|
|
avatar_url TEXT,
|
|
password_hash TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE conversations (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
next_sequence BIGINT NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE conversation_participants (
|
|
conversation_id UUID REFERENCES conversations(id),
|
|
user_id UUID REFERENCES users(id),
|
|
last_read_seq BIGINT NOT NULL DEFAULT 0,
|
|
joined_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
PRIMARY KEY (conversation_id, user_id),
|
|
UNIQUE (conversation_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE messages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
conversation_id UUID REFERENCES conversations(id) NOT NULL,
|
|
sender_id UUID REFERENCES users(id) NOT NULL,
|
|
sequence BIGINT NOT NULL,
|
|
message_type VARCHAR(16) NOT NULL,
|
|
body TEXT,
|
|
media_metadata JSONB,
|
|
client_msg_id UUID NOT NULL,
|
|
status VARCHAR(16) NOT NULL DEFAULT 'sent',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
UNIQUE (conversation_id, sequence),
|
|
UNIQUE (client_msg_id)
|
|
);
|
|
|
|
CREATE TABLE sticker_packs (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name VARCHAR(64) NOT NULL,
|
|
author VARCHAR(64),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE stickers (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
pack_id UUID REFERENCES sticker_packs(id) NOT NULL,
|
|
emoji_tag VARCHAR(8),
|
|
image_url TEXT NOT NULL,
|
|
thumbnail_url TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|