taskflow-frontend / lib /audit-service.ts
Tahasaif3's picture
'changes'
5e870e6
// lib/audit-service.ts
interface AuditEvent {
id: number;
event_id: string;
event_type: string;
user_id: string;
task_id: number;
event_data: {
title: string;
description?: string;
completed: boolean;
};
timestamp: string;
}
interface AuditResponse {
events: AuditEvent[];
}
export interface AuditFilters {
eventType?: string;
limit?: number;
offset?: number;
sortBy?: 'timestamp' | 'event_type' | 'task_id'; // Default is timestamp
sortOrder?: 'asc' | 'desc'; // Default is desc
}
/**
* Fetch audit trail for a specific user
* @param userId The ID of the user whose audit trail to fetch
* @param filters Optional filters for the audit events
* @returns Promise resolving to audit events
*/
export const fetchAuditTrail = async (
userId: string,
filters?: AuditFilters
): Promise<AuditResponse> => {
const params = new URLSearchParams();
if (filters?.eventType) {
params.append('event_type', filters.eventType);
}
if (filters?.limit) {
params.append('limit', filters.limit.toString());
}
if (filters?.offset) {
params.append('offset', filters.offset.toString());
}
if (filters?.sortBy) {
params.append('sort_by', filters.sortBy);
}
if (filters?.sortOrder) {
params.append('sort_order', filters.sortOrder);
}
const queryString = params.toString();
const url = `/api/${userId}/audit${queryString ? `?${queryString}` : ''}`;
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Failed to fetch audit trail: ${response.statusText}`);
}
return response.json();
};
/**
* Fetch a specific audit event by ID
* @param userId The ID of the user
* @param eventId The ID of the audit event
* @returns Promise resolving to a single audit event
*/
export const fetchAuditEventById = async (
userId: string,
eventId: number
): Promise<AuditEvent> => {
const response = await fetch(`/api/${userId}/audit/${eventId}`);
if (!response.ok) {
throw new Error(`Failed to fetch audit event: ${response.statusText}`);
}
return response.json();
};