feat: add queued status + FIFO queue ordering
- Add Queued variant to VideoStatus enum - Trigger sets videos.status='queued' instead of staying 'pending' - Worker sets videos.status='processing' on pickup - list_monitor_jobs_by_status ORDER BY created_at ASC (FIFO) - queue_position counts both 'pending' and 'queued' jobs
This commit is contained in:
+30
-8
@@ -1289,6 +1289,8 @@ pub struct SetProfileFromFaceRequest {
|
||||
pub file_uuid: String,
|
||||
pub face_id: Option<String>,
|
||||
pub id: Option<i64>,
|
||||
pub trace_id: Option<i32>,
|
||||
pub frame_number: Option<i64>,
|
||||
}
|
||||
|
||||
async fn set_profile_from_face(
|
||||
@@ -1302,20 +1304,40 @@ async fn set_profile_from_face(
|
||||
|
||||
let uuid_clean = identity_uuid.replace('-', "");
|
||||
|
||||
let face_identifier = match (&req.face_id, req.id) {
|
||||
(Some(fid), _) => fid.clone(),
|
||||
(None, Some(id)) => id.to_string(),
|
||||
(None, None) => {
|
||||
let (face_identifier, use_trace, use_frame) = match (&req.face_id, req.id, req.trace_id) {
|
||||
(Some(fid), _, _) => (fid.clone(), false, None),
|
||||
(None, Some(id), _) => (id.to_string(), false, None),
|
||||
(None, None, Some(trace_id)) => (trace_id.to_string(), true, req.frame_number),
|
||||
(None, None, None) => {
|
||||
return Err((
|
||||
StatusCode::BAD_REQUEST,
|
||||
Json(serde_json::json!({"success": false, "message": "Either face_id or id is required"})),
|
||||
Json(serde_json::json!({"success": false, "message": "Either face_id, id, or trace_id is required"})),
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
let use_id_field = req.id.is_some();
|
||||
|
||||
let row: Option<(i64, i32, i32, i32, i32, f64)> = if use_id_field {
|
||||
let row: Option<(i64, i32, i32, i32, i32, f64)> = if use_trace {
|
||||
if let Some(frame) = use_frame {
|
||||
sqlx::query_as(&format!(
|
||||
"SELECT frame_number, x, y, width, height, confidence FROM {} WHERE file_uuid = $1 AND trace_id = $2 AND frame_number = $3 LIMIT 1",
|
||||
fd_table
|
||||
))
|
||||
.bind(&req.file_uuid)
|
||||
.bind(use_trace)
|
||||
.bind(frame as i32)
|
||||
.fetch_optional(state.db.pool())
|
||||
.await
|
||||
} else {
|
||||
sqlx::query_as(&format!(
|
||||
"SELECT frame_number, x, y, width, height, confidence FROM {} WHERE file_uuid = $1 AND trace_id = $2 ORDER BY confidence DESC LIMIT 1",
|
||||
fd_table
|
||||
))
|
||||
.bind(&req.file_uuid)
|
||||
.bind(use_trace)
|
||||
.fetch_optional(state.db.pool())
|
||||
.await
|
||||
}
|
||||
} else if req.id.is_some() {
|
||||
sqlx::query_as(&format!(
|
||||
"SELECT frame_number, x, y, width, height, confidence FROM {} WHERE file_uuid = $1 AND id = $2",
|
||||
fd_table
|
||||
|
||||
Reference in New Issue
Block a user