DROP TABLE IF EXISTS users;
CREATE TABLE users (
    id                   TEXT PRIMARY KEY,
    handle               TEXT NOT NULL UNIQUE,
    full_name            TEXT,
    email                TEXT UNIQUE,
    website              TEXT,
    roles                TEXT NOT NULL, -- json array of user roles
    avatar_asset_id      TEXT,

    status               TEXT CHECK(status IN ('Invited', 'Active', 'Disabled')) NOT NULL DEFAULT 'Disabled',
    password_hash        TEXT,
    reset_password_token TEXT,
    last_login_at        DATETIME,
    created_at           DATETIME NOT NULL
);

DROP TABLE IF EXISTS user_assets;
CREATE TABLE user_assets (
    id                   TEXT PRIMARY KEY,
    user_id              TEXT NOT NULL,
    mime_type            TEXT NOT NULL,
    fingerprint          TEXT NOT NULL,
    name                 TEXT, -- file name
    content              BLOB NOT NULL,
    created_at           DATETIME NOT NULL
);

DROP TABLE IF EXISTS authorizations;
CREATE TABLE authorizations (
    id                  TEXT PRIMARY KEY,
    user_id             TEXT NOT NULL,
    client_id           TEXT NOT NULL,
    scopes              TEXT, -- json array of app scope (permissions)
    code                TEXT,

    last_used_at        DATETIME,
    created_at          DATETIME NOT NULL
);

