init.sql 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. -- Initialize authentication database
  2. PRAGMA foreign_keys = ON;
  3. -- Users table (single user system)
  4. CREATE TABLE IF NOT EXISTS users (
  5. id INTEGER PRIMARY KEY AUTOINCREMENT,
  6. username TEXT UNIQUE NOT NULL,
  7. password_hash TEXT NOT NULL,
  8. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  9. last_login DATETIME,
  10. is_active BOOLEAN DEFAULT 1,
  11. git_name TEXT,
  12. git_email TEXT,
  13. has_completed_onboarding BOOLEAN DEFAULT 0
  14. );
  15. -- Indexes for performance
  16. CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
  17. CREATE INDEX IF NOT EXISTS idx_users_active ON users(is_active);
  18. -- API Keys table for external API access
  19. CREATE TABLE IF NOT EXISTS api_keys (
  20. id INTEGER PRIMARY KEY AUTOINCREMENT,
  21. user_id INTEGER NOT NULL,
  22. key_name TEXT NOT NULL,
  23. api_key TEXT UNIQUE NOT NULL,
  24. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  25. last_used DATETIME,
  26. is_active BOOLEAN DEFAULT 1,
  27. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
  28. );
  29. CREATE INDEX IF NOT EXISTS idx_api_keys_key ON api_keys(api_key);
  30. CREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON api_keys(user_id);
  31. CREATE INDEX IF NOT EXISTS idx_api_keys_active ON api_keys(is_active);
  32. -- User credentials table for storing various tokens/credentials (GitHub, GitLab, etc.)
  33. CREATE TABLE IF NOT EXISTS user_credentials (
  34. id INTEGER PRIMARY KEY AUTOINCREMENT,
  35. user_id INTEGER NOT NULL,
  36. credential_name TEXT NOT NULL,
  37. credential_type TEXT NOT NULL, -- 'github_token', 'gitlab_token', 'bitbucket_token', etc.
  38. credential_value TEXT NOT NULL,
  39. description TEXT,
  40. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  41. is_active BOOLEAN DEFAULT 1,
  42. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
  43. );
  44. CREATE INDEX IF NOT EXISTS idx_user_credentials_user_id ON user_credentials(user_id);
  45. CREATE INDEX IF NOT EXISTS idx_user_credentials_type ON user_credentials(credential_type);
  46. CREATE INDEX IF NOT EXISTS idx_user_credentials_active ON user_credentials(is_active);
  47. -- User notification preferences (backend-owned, provider-agnostic)
  48. CREATE TABLE IF NOT EXISTS user_notification_preferences (
  49. user_id INTEGER PRIMARY KEY,
  50. preferences_json TEXT NOT NULL,
  51. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  52. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
  53. );
  54. -- VAPID key pair for Web Push notifications
  55. CREATE TABLE IF NOT EXISTS vapid_keys (
  56. id INTEGER PRIMARY KEY AUTOINCREMENT,
  57. public_key TEXT NOT NULL,
  58. private_key TEXT NOT NULL,
  59. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  60. );
  61. -- Browser push subscriptions
  62. CREATE TABLE IF NOT EXISTS push_subscriptions (
  63. id INTEGER PRIMARY KEY AUTOINCREMENT,
  64. user_id INTEGER NOT NULL,
  65. endpoint TEXT NOT NULL UNIQUE,
  66. keys_p256dh TEXT NOT NULL,
  67. keys_auth TEXT NOT NULL,
  68. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  69. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
  70. );
  71. -- Session custom names (provider-agnostic display name overrides)
  72. CREATE TABLE IF NOT EXISTS session_names (
  73. id INTEGER PRIMARY KEY AUTOINCREMENT,
  74. session_id TEXT NOT NULL,
  75. provider TEXT NOT NULL DEFAULT 'claude',
  76. custom_name TEXT NOT NULL,
  77. created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  78. updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  79. UNIQUE(session_id, provider)
  80. );
  81. CREATE INDEX IF NOT EXISTS idx_session_names_lookup ON session_names(session_id, provider);
  82. -- App configuration table (auto-generated secrets, settings, etc.)
  83. CREATE TABLE IF NOT EXISTS app_config (
  84. key TEXT PRIMARY KEY,
  85. value TEXT NOT NULL,
  86. created_at DATETIME DEFAULT CURRENT_TIMESTAMP
  87. );