From 849dba6047e6635689e0c1637acf17a1242e3d3c Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 29 Sep 2026 20:20:14 +0000 Subject: [PATCH] Sync latest-evidence search and distinct source counts --- src/db.ts | 16 ++++++++++++---- src/index.ts | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/db.ts b/src/db.ts index 6e18a60..2b36182 100644 --- a/src/db.ts +++ b/src/db.ts @@ -813,7 +813,9 @@ export async function listSources() { export async function sourceStatus() { const result = await pool.query(` SELECT s.*, - (SELECT COUNT(*)::int FROM signals sig WHERE sig.source_id=s.id) AS signal_count, + (SELECT COUNT(DISTINCT sig.external_id)::int + FROM signals sig + WHERE sig.source_id=s.id) AS signal_count, (SELECT COUNT(*)::int FROM opportunities o JOIN signals sig ON sig.id=o.signal_id @@ -924,11 +926,17 @@ export async function getEvidence(id: string) { export async function searchEvidence(query: string, limit = 20) { const result = await pool.query( - `SELECT e.*, s.source_id,s.title,s.summary,s.url,s.published_at, + `WITH latest_signal AS ( + SELECT DISTINCT ON (source_id,external_id) id + FROM signals + ORDER BY source_id,external_id,detected_at DESC + ) + SELECT e.*, s.source_id,s.title,s.summary,s.url,s.published_at, src.publisher,src.source_class,src.independence_group,src.authority_tier, ss.retrieved_at AS snapshot_retrieved_at - FROM evidence e - JOIN signals s ON s.id=e.signal_id + FROM latest_signal ls + JOIN signals s ON s.id=ls.id + JOIN evidence e ON e.signal_id=s.id LEFT JOIN sources src ON src.id=s.source_id LEFT JOIN source_snapshots ss ON ss.id=e.snapshot_id WHERE e.excerpt ILIKE $1 OR s.title ILIKE $1 OR s.summary ILIKE $1 diff --git a/src/index.ts b/src/index.ts index 11c99d6..865d213 100644 --- a/src/index.ts +++ b/src/index.ts @@ -143,7 +143,7 @@ app.get("/ready", async (_req, res) => { try { const result = await pool.query( `SELECT s.id, s.name, s.last_synced_at, s.last_error, - COUNT(sig.id)::int AS signal_count + COUNT(DISTINCT sig.external_id)::int AS signal_count FROM sources s LEFT JOIN signals sig ON sig.source_id=s.id GROUP BY s.id,s.name,s.last_synced_at,s.last_error,s.baseline_complete