-- Weibo-HotSign Database Initialization Script for SQLite -- Create tables according to development document specification -- Users table CREATE TABLE IF NOT EXISTS users ( id TEXT PRIMARY KEY, username TEXT UNIQUE NOT NULL, email TEXT UNIQUE, hashed_password TEXT, wx_openid TEXT UNIQUE, wx_nickname TEXT, wx_avatar TEXT, is_admin INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, is_active INTEGER DEFAULT 1 ); -- Accounts table CREATE TABLE IF NOT EXISTS accounts ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, weibo_user_id TEXT NOT NULL, remark TEXT, encrypted_cookies TEXT NOT NULL, iv TEXT NOT NULL, status TEXT DEFAULT 'pending', last_checked_at TIMESTAMP NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); -- Tasks table CREATE TABLE IF NOT EXISTS tasks ( id TEXT PRIMARY KEY, account_id TEXT NOT NULL, cron_expression TEXT NOT NULL, is_enabled INTEGER DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE ); -- Signin logs table CREATE TABLE IF NOT EXISTS signin_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, account_id TEXT NOT NULL, topic_title TEXT, status TEXT NOT NULL, reward_info TEXT, error_message TEXT, signed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (account_id) REFERENCES accounts(id) ); -- Create indexes for better performance CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); CREATE INDEX IF NOT EXISTS idx_users_username ON users(username); CREATE INDEX IF NOT EXISTS idx_users_wx_openid ON users(wx_openid); CREATE INDEX IF NOT EXISTS idx_accounts_user_id ON accounts(user_id); CREATE INDEX IF NOT EXISTS idx_accounts_status ON accounts(status); CREATE INDEX IF NOT EXISTS idx_tasks_account_id ON tasks(account_id); CREATE INDEX IF NOT EXISTS idx_tasks_is_enabled ON tasks(is_enabled); CREATE INDEX IF NOT EXISTS idx_signin_logs_account_id ON signin_logs(account_id); CREATE INDEX IF NOT EXISTS idx_signin_logs_signed_at ON signin_logs(signed_at); CREATE INDEX IF NOT EXISTS idx_signin_logs_status ON signin_logs(status); -- Invite codes table CREATE TABLE IF NOT EXISTS invite_codes ( id TEXT PRIMARY KEY, code TEXT UNIQUE NOT NULL, created_by TEXT NOT NULL, used_by TEXT, is_used INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, used_at TIMESTAMP NULL ); CREATE INDEX IF NOT EXISTS idx_invite_codes_code ON invite_codes(code); CREATE INDEX IF NOT EXISTS idx_invite_codes_is_used ON invite_codes(is_used);