detailed data for verifications
This commit is contained in:
@@ -549,7 +549,14 @@ async fn list_videos(State(s): State<AppState>, user: AuthUser, AxPath(id): AxPa
|
||||
hand_raised, hand_raised_by, hand_raised_at, ignored, ignored_by,
|
||||
COALESCE((SELECT json_agg(json_build_object('username', r.username, 'body', r.body, 'created_at', r.created_at)
|
||||
ORDER BY r.created_at)
|
||||
FROM video_remarks r WHERE r.video_id = videos.id), '[]'::json) AS remarks
|
||||
FROM video_remarks r WHERE r.video_id = videos.id), '[]'::json) AS remarks,
|
||||
-- per-pass annotation-count history (each push, in order): lets the UI
|
||||
-- show imported baseline → verify Δ → re-verify Δ. count is null for
|
||||
-- legacy pushes logged before we recorded it.
|
||||
COALESCE((SELECT json_agg(json_build_object(
|
||||
'username', e.username, 'at', e.at,
|
||||
'count', (e.meta->>'annotation_count')::int) ORDER BY e.at)
|
||||
FROM video_events e WHERE e.video_id = videos.id AND e.event='push'), '[]'::json) AS passes
|
||||
FROM videos WHERE project_id=$1 {FOLDER_FILTER} ORDER BY file_name"#);
|
||||
let rows = sqlx::query_as::<_, VideoRow>(&q)
|
||||
.bind(id)
|
||||
|
||||
@@ -157,6 +157,10 @@ pub struct VideoRow {
|
||||
pub ignored_by: Option<String>,
|
||||
// Remark thread (json array of {username, body, created_at}); '[]' when none.
|
||||
pub remarks: serde_json::Value,
|
||||
// Per-pass annotation-count history (json array of {username, at, count}, one per
|
||||
// push in order); '[]' when never pushed. Drives the imported→verify→re-verify
|
||||
// count breakdown in the UI.
|
||||
pub passes: serde_json::Value,
|
||||
}
|
||||
|
||||
/// `POST /api/videos/:id/hand {raised}` — raise/lower the hand on a video.
|
||||
|
||||
@@ -282,7 +282,11 @@ pub async fn push(
|
||||
verify_time_ms = COALESCE(videos.verify_time_ms, 0) + $3,
|
||||
annotation_count=$4, raw_json=$5,
|
||||
primary_annotator=$6, annotation_time_ms=$7, annotated_at=now(),
|
||||
imported_count = COALESCE(NULLIF($8, 0), videos.imported_count),
|
||||
-- imported_count is the ORIGINAL auto-imported baseline (set at ingest).
|
||||
-- Keep it fixed once set: verification/re-verification must NOT fold added
|
||||
-- annotations into it (otherwise "imported 200" would drift to 210). Only
|
||||
-- establish it from the claim-time count if it was never set.
|
||||
imported_count = COALESCE(NULLIF(videos.imported_count, 0), $8),
|
||||
claimed_by=NULL, claimed_at=NULL, lease_expires_at=NULL
|
||||
WHERE id=$1"#,
|
||||
)
|
||||
@@ -299,7 +303,16 @@ pub async fn push(
|
||||
.map_err(err)?;
|
||||
tx.commit().await.map_err(err)?;
|
||||
|
||||
log_event(&s.db, id, &user.username, "push", json!({ "verify_time_ms": verify_time_ms })).await;
|
||||
// Record this pass's resulting annotation count so the dashboard can show a
|
||||
// per-pass breakdown (imported baseline → verify Δ → re-verify Δ …), not just a net.
|
||||
log_event(
|
||||
&s.db,
|
||||
id,
|
||||
&user.username,
|
||||
"push",
|
||||
json!({ "verify_time_ms": verify_time_ms, "annotation_count": ann_count }),
|
||||
)
|
||||
.await;
|
||||
|
||||
// Mark project activity + auto-resume its timer (a verify/re-verify restarts it).
|
||||
let _ = sqlx::query(
|
||||
|
||||
Reference in New Issue
Block a user