Files
order_site/apps/backend/src/repositories/task-event-repo.ts
T

60 lines
1.2 KiB
TypeScript

import { query } from '../db/client.js'
type TaskEventRow = {
[column: string]: unknown
id: number
task_id: number
event_type: string
payload_json: string | Record<string, unknown>
created_at: string
}
type TaskEventListOptions = {
limit?: number | string
}
export async function createTaskEvent(
taskId: number | string,
eventType: string,
payload: unknown = {},
createdAt: string | undefined = undefined,
): Promise<TaskEventRow | null> {
const result = await query<TaskEventRow>(
`
INSERT INTO task_events (
task_id,
event_type,
payload_json,
created_at
) VALUES ($1, $2, $3::jsonb, $4)
RETURNING *
`,
[
Number(taskId),
String(eventType || '').trim(),
JSON.stringify(payload || {}),
createdAt,
],
)
return result.rows[0] || null
}
export async function listTaskEventsByTaskId(
taskId: number | string,
{ limit = 20 }: TaskEventListOptions = {},
): Promise<TaskEventRow[]> {
const result = await query<TaskEventRow>(
`
SELECT *
FROM task_events
WHERE task_id = $1
ORDER BY created_at DESC, id DESC
LIMIT $2
`,
[Number(taskId), Math.max(1, Number(limit || 20))],
)
return result.rows
}