CREATE DATABASE IF NOT EXISTS job_scraper_db; USE job_scraper_db; CREATE TABLE IF NOT EXISTS jobs ( job_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, company VARCHAR(255), location VARCHAR(255), posted_date_raw VARCHAR(100), job_link VARCHAR(512) UNIQUE NOT NULL, is_actively_hiring BOOLEAN DEFAULT FALSE, description TEXT DEFAULT NULL, match_score INT DEFAULT NULL, match_breakdown JSON DEFAULT NULL, matched_skills JSON DEFAULT NULL, missing_skills JSON DEFAULT NULL, verdict VARCHAR(50) DEFAULT NULL, detail_fetched_at DATETIME DEFAULT NULL, scored_at DATETIME DEFAULT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_match_score (match_score), INDEX idx_verdict (verdict) ); CREATE TABLE IF NOT EXISTS users ( user_id INT AUTO_INCREMENT PRIMARY KEY, telegram_token VARCHAR(255) NOT NULL, telegram_chat_id VARCHAR(50) NOT NULL, min_match_score INT DEFAULT 70, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS alert_logs ( alert_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, job_id INT NOT NULL, alerted_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_user_job (user_id, job_id), FOREIGN KEY (user_id) REFERENCES users(user_id), FOREIGN KEY (job_id) REFERENCES jobs(job_id) ); -- Migration: add columns required by daemon.py to an existing jobs table ALTER TABLE jobs ADD COLUMN IF NOT EXISTS description TEXT DEFAULT NULL, ADD COLUMN IF NOT EXISTS match_score INT DEFAULT NULL, ADD COLUMN IF NOT EXISTS match_breakdown JSON DEFAULT NULL, ADD COLUMN IF NOT EXISTS matched_skills JSON DEFAULT NULL, ADD COLUMN IF NOT EXISTS missing_skills JSON DEFAULT NULL, ADD COLUMN IF NOT EXISTS verdict VARCHAR(50) DEFAULT NULL, ADD COLUMN IF NOT EXISTS detail_fetched_at DATETIME DEFAULT NULL, ADD COLUMN IF NOT EXISTS scored_at DATETIME DEFAULT NULL; ALTER TABLE jobs ADD INDEX IF NOT EXISTS idx_match_score (match_score), ADD INDEX IF NOT EXISTS idx_verdict (verdict);