| import { supabase } from './client'; |
| import { logger } from '../utils/logger'; |
|
|
| export interface JobEvent { |
| id: string; |
| job_id: string; |
| identity_id: string | null; |
| level: 'info' | 'warning' | 'error'; |
| step: string; |
| message: string; |
| metadata: Record<string, unknown> | null; |
| created_at: string; |
| } |
|
|
| export interface JobEventInsert { |
| job_id: string; |
| identity_id: string | null; |
| level: 'info' | 'warning' | 'error'; |
| step: string; |
| message: string; |
| metadata?: Record<string, unknown>; |
| } |
|
|
| |
| |
| |
| export async function insertJobEvent(event: JobEventInsert): Promise<void> { |
| const { error } = await supabase |
| .from('turnitin_job_events') |
| .insert({ |
| job_id: event.job_id, |
| identity_id: event.identity_id, |
| level: event.level, |
| step: event.step, |
| message: event.message, |
| metadata: event.metadata || {}, |
| }); |
|
|
| if (error) { |
| logger.error('Failed to insert job event', { |
| jobId: event.job_id, |
| step: event.step, |
| error: error.message, |
| }); |
| throw error; |
| } |
| } |
|
|
| |
| |
| |
| export async function getJobEvents(jobId: string): Promise<JobEvent[]> { |
| const { data, error } = await supabase |
| .from('turnitin_job_events') |
| .select('*') |
| .eq('job_id', jobId) |
| .order('created_at', { ascending: true }); |
|
|
| if (error) { |
| logger.error('Failed to get job events', { jobId, error: error.message }); |
| throw error; |
| } |
|
|
| return (data as JobEvent[]) || []; |
| } |
|
|