From 02ad015b868f71be9d1b4e179c0676ea488f6677 Mon Sep 17 00:00:00 2001 From: Accusys Date: Tue, 19 May 2026 18:09:25 +0800 Subject: [PATCH] fix: type mismatch BIGINT->INT4 and FLOAT8->FLOAT4 in traces and faces endpoints - trace_agent_api: CAST trace_id, frame_number to int; CAST confidence to float4 - identities: CAST frame_number to int; CAST confidence to float4 - Fixes 500 errors on /traces, /trace/:id/faces, /faces/candidates --- src/api/identities.rs | 4 ++-- src/api/trace_agent_api.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/api/identities.rs b/src/api/identities.rs index 7c094ff..d6dcbc8 100644 --- a/src/api/identities.rs +++ b/src/api/identities.rs @@ -328,7 +328,7 @@ async fn list_face_candidates( let rows = if let Some(file_uuid) = &query.file_uuid { let sql = format!( - "SELECT id, face_id, file_uuid, frame_number, confidence, + "SELECT id, face_id, file_uuid, frame_number::int, confidence::float4, jsonb_build_object('x', x, 'y', y, 'width', width, 'height', height) as bbox, NULL::jsonb as attributes FROM {} @@ -366,7 +366,7 @@ async fn list_face_candidates( } } else { let sql = format!( - "SELECT id, face_id, file_uuid, frame_number, confidence, + "SELECT id, face_id, file_uuid, frame_number::int, confidence::float4, jsonb_build_object('x', x, 'y', y, 'width', width, 'height', height) as bbox, NULL::jsonb as attributes FROM {} diff --git a/src/api/trace_agent_api.rs b/src/api/trace_agent_api.rs index 9c010e5..1449b73 100644 --- a/src/api/trace_agent_api.rs +++ b/src/api/trace_agent_api.rs @@ -89,10 +89,10 @@ async fn list_traces_sorted( let query = format!( "SELECT tt.*, fd.id AS sample_face_id FROM ( - SELECT trace_id, + SELECT trace_id::int AS trace_id, COUNT(*) AS face_count, - MIN(frame_number) AS start_frame, - MAX(frame_number) AS end_frame, + MIN(frame_number)::int AS start_frame, + MAX(frame_number)::int AS end_frame, (MAX(frame_number) - MIN(frame_number))::float8 AS duration_sec, AVG(confidence)::float8 AS avg_confidence FROM {} @@ -248,7 +248,7 @@ async fn list_trace_faces( Option, f32, )> = sqlx::query_as( - &format!("SELECT id, frame_number, x, y, width, height, confidence \ + &format!("SELECT id, frame_number::int, x, y, width, height, confidence::float4 \ FROM {} WHERE file_uuid = $1 AND trace_id = $2 \ ORDER BY frame_number ASC LIMIT $3 OFFSET $4", crate::core::db::schema::table_name("face_detections"))