76 lines
1.9 KiB
SQL
76 lines
1.9 KiB
SQL
CREATE TABLE IF NOT EXISTS users (
|
|
id TEXT PRIMARY KEY,
|
|
username TEXT NOT NULL UNIQUE,
|
|
display_name TEXT NOT NULL,
|
|
note TEXT NOT NULL DEFAULT '',
|
|
password_hash TEXT NOT NULL,
|
|
private_key_jwk TEXT NOT NULL,
|
|
public_key_jwk TEXT NOT NULL,
|
|
created_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS oauth_apps (
|
|
id TEXT PRIMARY KEY,
|
|
client_id TEXT NOT NULL UNIQUE,
|
|
client_secret TEXT NOT NULL,
|
|
name TEXT NOT NULL,
|
|
redirect_uri TEXT NOT NULL,
|
|
scopes TEXT NOT NULL,
|
|
website TEXT,
|
|
created_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS oauth_codes (
|
|
code TEXT PRIMARY KEY,
|
|
app_id TEXT NOT NULL,
|
|
user_id TEXT NOT NULL,
|
|
redirect_uri TEXT NOT NULL,
|
|
scopes TEXT NOT NULL,
|
|
expires_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS statuses (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
visibility TEXT NOT NULL DEFAULT 'public',
|
|
in_reply_to_id TEXT,
|
|
activity_id TEXT NOT NULL UNIQUE,
|
|
object_id TEXT NOT NULL UNIQUE,
|
|
created_at TEXT NOT NULL,
|
|
url TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS media (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL,
|
|
status_id TEXT,
|
|
r2_key TEXT NOT NULL,
|
|
mime_type TEXT NOT NULL,
|
|
description TEXT,
|
|
size INTEGER NOT NULL,
|
|
created_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS follows (
|
|
id TEXT PRIMARY KEY,
|
|
follower_actor TEXT NOT NULL,
|
|
local_user_id TEXT NOT NULL,
|
|
inbox TEXT NOT NULL,
|
|
accepted INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL,
|
|
UNIQUE(follower_actor, local_user_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS remote_activities (
|
|
id TEXT PRIMARY KEY,
|
|
actor TEXT NOT NULL,
|
|
type TEXT NOT NULL,
|
|
payload TEXT NOT NULL,
|
|
received_at TEXT NOT NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_statuses_created_at ON statuses(created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_media_user ON media(user_id, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_follows_local_user ON follows(local_user_id);
|