feat(voice): add async selectable summaries
This commit is contained in:
55
server/migrations/0005_feedback_summary_runs.sql
Normal file
55
server/migrations/0005_feedback_summary_runs.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
CREATE TABLE feedback_summary_runs (
|
||||
id UUID PRIMARY KEY,
|
||||
feedback_session_id UUID NOT NULL REFERENCES feedback_sessions(id) ON DELETE CASCADE,
|
||||
idempotency_key VARCHAR(100) NOT NULL UNIQUE,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'queued',
|
||||
existing_content TEXT NOT NULL DEFAULT '',
|
||||
source_hash VARCHAR(64),
|
||||
content TEXT,
|
||||
method VARCHAR(24),
|
||||
model TEXT,
|
||||
prompt_version VARCHAR(32) NOT NULL DEFAULT 'summary-v1',
|
||||
character_count INTEGER,
|
||||
error_class VARCHAR(64),
|
||||
error_message TEXT,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
processing_started_at TIMESTAMPTZ,
|
||||
completed_at TIMESTAMPTZ,
|
||||
applied_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
CONSTRAINT feedback_summary_runs_status_check
|
||||
CHECK (status IN ('queued', 'processing', 'ready', 'failed', 'applied')),
|
||||
CONSTRAINT feedback_summary_runs_idempotency_key_check
|
||||
CHECK (char_length(idempotency_key) BETWEEN 1 AND 100),
|
||||
CONSTRAINT feedback_summary_runs_existing_content_check
|
||||
CHECK (char_length(existing_content) <= 2000),
|
||||
CONSTRAINT feedback_summary_runs_content_check
|
||||
CHECK (content IS NULL OR char_length(content) <= 2000),
|
||||
CONSTRAINT feedback_summary_runs_character_count_check
|
||||
CHECK (character_count IS NULL OR character_count BETWEEN 0 AND 2000),
|
||||
CONSTRAINT feedback_summary_runs_attempts_check
|
||||
CHECK (attempts >= 0),
|
||||
CONSTRAINT feedback_summary_runs_result_check
|
||||
CHECK (
|
||||
(status IN ('ready', 'applied') AND content IS NOT NULL AND character_count IS NOT NULL AND completed_at IS NOT NULL)
|
||||
OR
|
||||
(status NOT IN ('ready', 'applied') AND content IS NULL AND character_count IS NULL)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE feedback_summary_run_lessons (
|
||||
summary_run_id UUID NOT NULL REFERENCES feedback_summary_runs(id) ON DELETE CASCADE,
|
||||
lesson_session_id UUID NOT NULL REFERENCES lesson_sessions(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (summary_run_id, lesson_session_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_feedback_summary_runs_session_created
|
||||
ON feedback_summary_runs(feedback_session_id, created_at DESC);
|
||||
|
||||
CREATE INDEX idx_feedback_summary_runs_queue
|
||||
ON feedback_summary_runs(created_at, id)
|
||||
WHERE status IN ('queued', 'processing');
|
||||
|
||||
CREATE INDEX idx_feedback_summary_run_lessons_lesson
|
||||
ON feedback_summary_run_lessons(lesson_session_id);
|
||||
Reference in New Issue
Block a user