No production instances exist, so safe to rewrite from scratch. Drops columns that were added then removed (notes, password_hash, cup rating), standardises timestamp format and primary key style, and creates all tables in their final form without incremental ALTER TABLE churn.
51 lines
1.8 KiB
SQL
51 lines
1.8 KiB
SQL
-- Authentication and authorisation tables
|
|
|
|
CREATE TABLE users (
|
|
id INTEGER PRIMARY KEY,
|
|
username TEXT NOT NULL UNIQUE,
|
|
uuid TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
|
|
);
|
|
|
|
CREATE TABLE tokens (
|
|
id INTEGER PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
token_hash TEXT NOT NULL UNIQUE,
|
|
name TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
last_used_at TEXT,
|
|
revoked_at TEXT
|
|
);
|
|
CREATE INDEX idx_tokens_user_id ON tokens(user_id);
|
|
CREATE INDEX idx_tokens_token_hash ON tokens(token_hash);
|
|
|
|
CREATE TABLE sessions (
|
|
id INTEGER PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
session_token_hash TEXT NOT NULL,
|
|
created_at TEXT NOT NULL,
|
|
expires_at TEXT NOT NULL
|
|
);
|
|
CREATE INDEX idx_sessions_token_hash ON sessions(session_token_hash);
|
|
CREATE INDEX idx_sessions_user_id ON sessions(user_id);
|
|
CREATE INDEX idx_sessions_expires_at ON sessions(expires_at);
|
|
|
|
CREATE TABLE passkey_credentials (
|
|
id INTEGER PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
credential_json TEXT NOT NULL,
|
|
name TEXT NOT NULL DEFAULT 'default',
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
last_used_at TEXT
|
|
);
|
|
CREATE INDEX idx_passkey_credentials_user_id ON passkey_credentials(user_id);
|
|
|
|
CREATE TABLE registration_tokens (
|
|
id INTEGER PRIMARY KEY,
|
|
token_hash TEXT NOT NULL UNIQUE,
|
|
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
expires_at TEXT NOT NULL,
|
|
used_at TEXT,
|
|
used_by_user_id INTEGER REFERENCES users(id)
|
|
);
|
|
CREATE INDEX idx_registration_tokens_token_hash ON registration_tokens(token_hash);
|