fix: code-review findings — closed-incident embedding 503, hardening, dedup
- /api/incidents/[id]/similar: embedding backfill on a closed incident hit the closure-lock trigger and turned the whole request into a 503; now skips persistence for closed incidents (vector still used for the query) - addenda: cap body at 5000 chars; include body text in audit_log entry - admin users PATCH: 404 when target user does not exist (was silent ok) - extract shared requireAdmin to lib/auth/require-admin.ts (was duplicated in admin users + sites routes) - extract escapeCsv/rowsToCsv to lib/csv.ts (was duplicated in dashboard export route and lib/reports/jkkp8.ts) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { computeDoshObligation } from '@/lib/incidents/dosh'
|
||||
import { escapeCsv } from '@/lib/csv'
|
||||
|
||||
export interface Jkkp8Incident {
|
||||
reference_no: string | null
|
||||
@@ -73,15 +74,6 @@ export const JKKP8_HEADERS = [
|
||||
'Description', 'Medical Status', 'Lost Days', 'NADOPOD Obligation', 'DOSH Filing Status',
|
||||
]
|
||||
|
||||
export function escapeCsv(value: string | number | null | undefined): string {
|
||||
if (value === null || value === undefined) return ''
|
||||
const str = String(value)
|
||||
if (str.includes(',') || str.includes('"') || str.includes('\n')) {
|
||||
return `"${str.replace(/"/g, '""')}"`
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
export function jkkp8Csv(rows: Jkkp8Row[]): string {
|
||||
const lines = [JKKP8_HEADERS.map(escapeCsv).join(',')]
|
||||
for (const r of rows) {
|
||||
|
||||
Reference in New Issue
Block a user