- Rename 002_background_tasks.sql → 007_background_tasks.sql to avoid collision with existing 002_add_listing_format.sql migration - Add CREATE UNIQUE INDEX on trust_scores(listing_id) in same migration so save_trust_scores() can use ON CONFLICT upsert semantics - Add Store.save_trust_scores() — upserts scores keyed by listing_id; preserves photo_analysis_json so runner writes are never clobbered - runner.py: replace raw sqlite3.connect() with get_connection() throughout (timeout=30 + WAL mode); fix connection leak in insert_task via try/finally - _run_trust_photo_analysis: read 'user_db' from params to write results to the correct per-user DB in cloud mode (was silently writing to wrong DB) - main.py lifespan: use _shared_db_path() in cloud mode so background_tasks queue lives in shared DB, not _LOCAL_SNIPE_DB - Add _enqueue_vision_tasks() and call it after score_batch() — this is the missing enqueue call site; gated by features.photo_analysis (Paid tier) - Test fixture: add missing 'stage' column to background_tasks schema
24 lines
963 B
SQL
24 lines
963 B
SQL
-- 007_background_tasks.sql
|
|
-- Shared background task queue used by the LLM/vision task scheduler.
|
|
-- Schema mirrors the circuitforge-core standard.
|
|
-- Also adds UNIQUE constraint on trust_scores(listing_id) so save_trust_scores()
|
|
-- can use ON CONFLICT upsert semantics.
|
|
|
|
CREATE TABLE IF NOT EXISTS background_tasks (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
task_type TEXT NOT NULL,
|
|
job_id INTEGER NOT NULL DEFAULT 0,
|
|
status TEXT NOT NULL DEFAULT 'queued',
|
|
params TEXT,
|
|
error TEXT,
|
|
stage TEXT,
|
|
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_bg_tasks_status_type
|
|
ON background_tasks (status, task_type);
|
|
|
|
-- Enable ON CONFLICT upsert in save_trust_scores() — idempotent on existing DBs.
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_trust_scores_listing
|
|
ON trust_scores (listing_id);
|