From 77098b88baec2dcfc6d9751a7ae81ffd078c92ae Mon Sep 17 00:00:00 2001 From: Accusys Date: Tue, 19 May 2026 16:05:46 +0800 Subject: [PATCH] feat: Phase 2-5 API test scripts + create_monitor_job fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 2: 10/10 passed ✅ Phase 3: 7/7 passed ✅ Phase 4: 9/11 passed (2 known bugs - i.name column) Phase 5: 13/23 passed (10 failures - pre-existing bugs) Fixes: - create_monitor_job: ON CONFLICT (uuid) DO UPDATE to prevent duplicate key errors - test scripts: Correct request bodies for all visual search endpoints --- scripts/test_m5api_phase3.sh | 2 +- scripts/test_m5api_phase4.sh | 18 +++++++++--------- src/core/db/postgres_db.rs | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/test_m5api_phase3.sh b/scripts/test_m5api_phase3.sh index 32fd4da..07ae576 100755 --- a/scripts/test_m5api_phase3.sh +++ b/scripts/test_m5api_phase3.sh @@ -62,7 +62,7 @@ test_api "POST" "/api/v1/file/$FILE_UUID/process" '{"processors":["cut"]}' "Trig echo "" echo "── Pipeline Status ──" test_api "GET" "/api/v1/stats/ingestion-status/$FILE_UUID" "" "Ingestion status" -test_api "GET" "/api/v1/health/detailed" "" "Detailed health" +test_api "GET" "/health/detailed" "" "Detailed health" echo "" echo "── Chunking ──" diff --git a/scripts/test_m5api_phase4.sh b/scripts/test_m5api_phase4.sh index 4030b57..ebe1622 100755 --- a/scripts/test_m5api_phase4.sh +++ b/scripts/test_m5api_phase4.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Phase 4: Search API Test # Modules: 06_search, 08_identity_agent, 12_agent -# Endpoints: 12 +# Endpoints: 11 BASE="https://m5api.momentry.ddns.net" API_KEY="muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69" @@ -61,19 +61,19 @@ test_api "POST" "/api/v1/search/frames" "{\"file_uuid\":\"$FILE_UUID\",\"frame_n echo "" echo "── Visual Search ──" test_api "POST" "/api/v1/search/visual" "{\"file_uuid\":\"$FILE_UUID\",\"criteria\":{}}" "Visual search" -test_api "POST" "/api/v1/search/visual/class" "{\"file_uuid\":\"$FILE_UUID\",\"required_classes\":[\"person\"]}" "Visual search by class" -test_api "POST" "/api/v1/search/visual/density" "{\"file_uuid\":\"$FILE_UUID\",\"min_avg_confidence\":0.5}" "Visual search by density" -test_api "POST" "/api/v1/search/visual/stats" "{\"file_uuid\":\"$FILE_UUID\"}" "Visual search stats" -test_api "POST" "/api/v1/search/visual/combination" "{\"file_uuid\":\"$FILE_UUID\",\"required_classes\":[\"person\",\"car\"]}" "Visual search combination" +test_api "POST" "/api/v1/search/visual/class" "{\"uuid\":\"$FILE_UUID\",\"object_class\":\"person\"}" "Visual search by class" +test_api "POST" "/api/v1/search/visual/density" "{\"uuid\":\"$FILE_UUID\",\"min_density\":0.1}" "Visual search by density" +test_api "POST" "/api/v1/search/visual/stats" "{\"uuid\":\"$FILE_UUID\"}" "Visual search stats" +test_api "POST" "/api/v1/search/visual/combination" "{\"uuid\":\"$FILE_UUID\",\"combination\":[[\"person\",1],[\"car\",1]]}" "Visual search combination" echo "" -echo "── Identity Text Search ──" -test_api "GET" "/api/v1/search/identity_text?query=Grant" "" "Identity text search" -test_api "GET" "/api/v1/identities/search?query=Grant" "" "Identities search" +echo "── Identity Text Search (pre-existing bug: i.name column) ──" +test_api "GET" "/api/v1/search/identity_text?uuid=$FILE_UUID&q=Grant" "" "Identity text search (known bug)" +test_api "GET" "/api/v1/identities/search?q=Grant" "" "Identities search (known bug)" echo "" echo "── Agent Search ──" -test_api "POST" "/api/v1/agents/translate" '{"text":"Hello world","target_lang":"zh"}' "Translate agent" +test_api "POST" "/api/v1/agents/translate" "{\"text\":\"Hello world\",\"target_language\":\"zh-TW\"}" "Translate agent" echo "" echo "============================================" diff --git a/src/core/db/postgres_db.rs b/src/core/db/postgres_db.rs index 169eb47..0b307af 100644 --- a/src/core/db/postgres_db.rs +++ b/src/core/db/postgres_db.rs @@ -1426,7 +1426,7 @@ impl PostgresDb { r#" INSERT INTO {} (uuid, video_path, status, video_id) VALUES ($1, $2, 'pending', $3) - ON CONFLICT DO NOTHING + ON CONFLICT (uuid) DO UPDATE SET status = 'pending', updated_at = NOW() RETURNING id, uuid, video_path, status, current_processor, progress_total, progress_current, error_count, last_error, started_at::TEXT, updated_at::TEXT, created_at::TEXT, processors, completed_processors, failed_processors, video_id "#, jobs_table