520 lines · 16.5 KB
-- core: squashed from 0001_init.sql, 0002_ci_approvals.sql, 0003_repo_provisioning.sql, 0004_import_source.sql.

-- Accounts are the shared owner namespace for users and organizations.
CREATE TABLE accounts (
  id TEXT PRIMARY KEY,
  name TEXT NOT NULL UNIQUE COLLATE NOCASE,
  kind TEXT NOT NULL CHECK (kind IN ('user', 'org')),
  display_name TEXT,
  bio TEXT,
  website TEXT,
  created_at INTEGER NOT NULL,
  avatar_key TEXT
);

CREATE TABLE users (
  account_id TEXT PRIMARY KEY REFERENCES accounts(id) ON DELETE CASCADE,
  email TEXT NOT NULL UNIQUE COLLATE NOCASE,
  password_hash TEXT,
  github_id TEXT UNIQUE,
  is_admin INTEGER NOT NULL DEFAULT 0,
  email_verified_at INTEGER,
  totp_secret TEXT,
  totp_iv TEXT,
  totp_enabled_at INTEGER,
  totp_last_step INTEGER,
  sessions_revoked_at INTEGER
);

CREATE TABLE org_members (
  org_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
  user_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
  role TEXT NOT NULL CHECK (role IN ('owner', 'member')),
  created_at INTEGER NOT NULL,
  PRIMARY KEY (org_id, user_id)
);

CREATE TABLE access_tokens (
  id TEXT PRIMARY KEY,
  user_id TEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
  name TEXT NOT NULL,