fix(roads): replace ON CONFLICT with delete and insert for bulletproof candidate approval

This commit is contained in:
Hamza-Ayed
2026-08-19 16:44:59 +03:00
parent 313c2f641f
commit 06895d6720
@@ -227,19 +227,15 @@ export class RoadRefinementController {
CREATE UNIQUE INDEX IF NOT EXISTS approved_roads_cand_uidx ON approved_roads(candidate_id) WHERE candidate_id IS NOT NULL;
`);
// 2. Direct insert/upsert into approved_roads immediately
// 2. Direct insert into approved_roads immediately (Delete existing first to ensure idempotency)
await this.dataSource.query(`
DELETE FROM approved_roads WHERE candidate_id = $1::uuid;
INSERT INTO approved_roads (
candidate_id, geometry, name, highway, confidence, "uniqueDriverCount", oneway, approved_at
)
SELECT
id, geometry::geometry, COALESCE(name, 'Unnamed Road'), COALESCE(highway, 'residential'), confidence, "uniqueDriverCount", COALESCE(oneway, 0), NOW()
FROM candidate_roads WHERE id = $1
ON CONFLICT (candidate_id) DO UPDATE SET
geometry = EXCLUDED.geometry,
name = EXCLUDED.name,
highway = EXCLUDED.highway,
confidence = EXCLUDED.confidence;
FROM candidate_roads WHERE id = $1::uuid;
`, [id]);
// 3. Mark candidate as approved