Files
MikrotikManager/backend/src/services/alert-engine/collector-context-reader.ts
T

19 lines
927 B
TypeScript

import { sql } from "drizzle-orm"
import type { db } from "../../db/index.js"
import type { CollectorRead } from "./signals-from-collectors.js"
/** Bind internal collector SELECTs to the caller's read-only transaction, including all values. */
export function createCollectorContextReader(context: Pick<typeof db, "execute">): CollectorRead {
return async <T extends object>(query: string, params: unknown[] = []): Promise<T[]> => {
const parts = query.split("?")
if (parts.length !== params.length + 1) throw Error("Неверные параметры запроса источников оповещений")
const statement = sql.empty()
for (let index = 0; index < parts.length; index++) {
statement.append(sql.raw(parts[index]))
if (index < params.length) statement.append(sql`${params[index]}`)
}
const result = await context.execute(statement)
return result.rows as T[]
}
}