feat(postgres): rewrite Ivanti findings to individual rows
- Replace 2.6MB JSON blob with individual rows in ivanti_findings table - Batch upsert via INSERT ... ON CONFLICT in chunks of 100 - Sync stores both open AND closed findings as rows with state column - Per-BU closed counts now possible via SQL GROUP BY - GET /findings queries indexed table with optional ILIKE BU filter - GET /counts returns per-BU open+closed via GROUP BY state - Notes and overrides are columns on ivanti_findings (no separate tables) - Removed: readState, readStateWithNotes, _findingsCache, initTables - Preserved: extractFinding, archive detection, FP workflow counts, anomaly log - Response shape unchanged — frontend works without modification
This commit is contained in: