const USER_TABLE_SCHEMA_SQL = ` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, last_login DATETIME, is_active BOOLEAN DEFAULT 1, git_name TEXT, git_email TEXT, has_completed_onboarding BOOLEAN DEFAULT 0 ); `; export const API_KEYS_TABLE_SCHEMA_SQL = ` CREATE TABLE IF NOT EXISTS api_keys ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, key_name TEXT NOT NULL, api_key TEXT UNIQUE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, last_used DATETIME, is_active BOOLEAN DEFAULT 1, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); `; export const USER_CREDENTIALS_TABLE_SCHEMA_SQL = ` CREATE TABLE IF NOT EXISTS user_credentials ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, credential_name TEXT NOT NULL, credential_type TEXT NOT NULL, -- 'github_token', 'gitlab_token', 'bitbucket_token', etc. credential_value TEXT NOT NULL, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, is_active BOOLEAN DEFAULT 1, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); `; export const SESSIONS_TABLE_SCHEMA_SQL = ` CREATE TABLE IF NOT EXISTS sessions ( session_id TEXT PRIMARY KEY NOT NULL, provider TEXT NOT NULL, custom_name TEXT, workspace_path TEXT NOT NULL, FOREIGN KEY (workspace_path) REFERENCES workspace_original_paths(workspace_path) ON DELETE CASCADE ON UPDATE CASCADE ); `; export const WORK_SPACE_PATH_SQL = ` CREATE TABLE IF NOT EXISTS workspace_original_paths ( workspace_path TEXT PRIMARY KEY NOT NULL, custom_workspace_name TEXT DEFAULT NULL ); ` export const LAST_SCANNED_AT_SQL = ` CREATE TABLE IF NOT EXISTS scan_state ( id INTEGER PRIMARY KEY CHECK (id = 1), last_scanned_at TIMESTAMP NULL ); ` export const APP_CONFIG_TABLE_SCHEMA_SQL = ` CREATE TABLE IF NOT EXISTS app_config ( key TEXT PRIMARY KEY, value TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); `; export const INIT_SCHEMA_SQL = ` -- Initialize authentication database PRAGMA foreign_keys = ON; ${USER_TABLE_SCHEMA_SQL} -- Indexes for performance for user lookups CREATE INDEX IF NOT EXISTS idx_users_username ON users(username); CREATE INDEX IF NOT EXISTS idx_users_active ON users(is_active); ${API_KEYS_TABLE_SCHEMA_SQL} CREATE INDEX IF NOT EXISTS idx_api_keys_key ON api_keys(api_key); CREATE INDEX IF NOT EXISTS idx_api_keys_user_id ON api_keys(user_id); CREATE INDEX IF NOT EXISTS idx_api_keys_active ON api_keys(is_active); ${USER_CREDENTIALS_TABLE_SCHEMA_SQL} CREATE INDEX IF NOT EXISTS idx_user_credentials_user_id ON user_credentials(user_id); CREATE INDEX IF NOT EXISTS idx_user_credentials_type ON user_credentials(credential_type); CREATE INDEX IF NOT EXISTS idx_user_credentials_active ON user_credentials(is_active); ${SESSIONS_TABLE_SCHEMA_SQL} CREATE INDEX IF NOT EXISTS idx_session_ids_lookup ON sessions(session_id); ${WORK_SPACE_PATH_SQL} ${LAST_SCANNED_AT_SQL} ${APP_CONFIG_TABLE_SCHEMA_SQL} `;