b87eb4e690
- Add insight_generation_jobs table migration and DAO - Implement job lifecycle: create_or_get_active, complete, fail, cancel - Refactor POST /insights/generate and /agentic to async spawn with timeout - Add GET /insights/generation/status endpoint with job_id and file_path lookup - Use String for enum fields in Diesel models to avoid private Bound type - Add from_str() helpers on InsightJobStatus and InsightGenerationType - Fix update_training_messages to return Result<usize, DbError> - 7/7 DAO unit tests passing
26 lines
1.0 KiB
SQL
26 lines
1.0 KiB
SQL
-- Track async insight generation jobs so the client can poll for
|
|
-- completion after the server returns 202 Accepted. The UNIQUE
|
|
-- constraint on (library_id, file_path, generation_type) ensures
|
|
-- idempotent inserts: if a running job already exists, the caller
|
|
-- should return that job_id instead of creating a duplicate.
|
|
CREATE TABLE insight_generation_jobs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
library_id INTEGER NOT NULL DEFAULT 1,
|
|
file_path TEXT NOT NULL,
|
|
generation_type TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'running',
|
|
started_at INTEGER NOT NULL,
|
|
completed_at INTEGER,
|
|
result_insight_id INTEGER,
|
|
error_message TEXT,
|
|
UNIQUE(library_id, file_path, generation_type)
|
|
);
|
|
|
|
-- For the status endpoint: fast lookup by (library_id, file_path)
|
|
CREATE INDEX idx_insight_gen_jobs_file
|
|
ON insight_generation_jobs(library_id, file_path);
|
|
|
|
-- For startup cleanup (future): prune old completed/failed jobs
|
|
CREATE INDEX idx_insight_gen_jobs_status_cleanup
|
|
ON insight_generation_jobs(status, started_at);
|