feat: Implement a comprehensive audit log system with a dedicated dashboard page and backend API.
This commit is contained in:
73
frontend/src/lib/api/dashboard/a76/audit_log.ts
Normal file
73
frontend/src/lib/api/dashboard/a76/audit_log.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { api } from '$lib/api';
|
||||
|
||||
const BASE_PATH = '/v1/a76/audit-log';
|
||||
|
||||
export interface AuditLog {
|
||||
spec_id: number;
|
||||
reference: string;
|
||||
procedure: string; // "Procedimiento"
|
||||
movement: string; // "Movimiento"
|
||||
username: string;
|
||||
date: string; // "YYYY-MM-DD"
|
||||
time: string; // "HH:MM:SS"
|
||||
timestamp: string; // ISO
|
||||
system: string;
|
||||
operation_type?: string;
|
||||
table_name?: string;
|
||||
old_values?: any;
|
||||
new_values?: any;
|
||||
}
|
||||
|
||||
export interface AuditLogResponse {
|
||||
data: AuditLog[];
|
||||
total: number;
|
||||
page: number;
|
||||
page_size: number;
|
||||
}
|
||||
|
||||
export interface AuditLogParams {
|
||||
page?: number;
|
||||
page_size?: number;
|
||||
search?: string;
|
||||
username?: string;
|
||||
procedure?: string;
|
||||
reference?: string;
|
||||
date_from?: string;
|
||||
date_to?: string;
|
||||
}
|
||||
|
||||
export const AuditLogAPI = {
|
||||
getLogs: async (params: AuditLogParams = {}): Promise<AuditLogResponse> => {
|
||||
const query = new URLSearchParams();
|
||||
if (params.page) query.append('page', params.page.toString());
|
||||
if (params.page_size) query.append('page_size', params.page_size.toString());
|
||||
if (params.search) query.append('search', params.search);
|
||||
if (params.username) query.append('username', params.username);
|
||||
if (params.procedure) query.append('procedure', params.procedure);
|
||||
if (params.reference) query.append('reference', params.reference);
|
||||
if (params.date_from) query.append('date_from', params.date_from);
|
||||
if (params.date_to) query.append('date_to', params.date_to);
|
||||
|
||||
const response = await api.get<AuditLogResponse>(`${BASE_PATH}/bitacora?${query.toString()}`);
|
||||
if (response.error || !response.data) {
|
||||
throw new Error(response.error || 'Failed to fetch audit logs');
|
||||
}
|
||||
return response.data;
|
||||
},
|
||||
|
||||
getProcedures: async (): Promise<string[]> => {
|
||||
const response = await api.get<string[]>(`${BASE_PATH}/bitacora/procedimientos`);
|
||||
if (response.error || !response.data) {
|
||||
throw new Error(response.error || 'Failed to fetch procedures');
|
||||
}
|
||||
return response.data;
|
||||
},
|
||||
|
||||
getDetail: async (specId: number): Promise<AuditLog> => {
|
||||
const response = await api.get<AuditLog>(`${BASE_PATH}/bitacora/${specId}/detalle`);
|
||||
if (response.error || !response.data) {
|
||||
throw new Error(response.error || 'Failed to fetch audit log detail');
|
||||
}
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
@@ -1,5 +1,4 @@
|
||||
|
||||
const BASE_URL = import.meta.env.VITE_API_URL || '';
|
||||
const BASE_URL = import.meta.env.VITE_API_URL || '';
|
||||
|
||||
export const invoicesReportsApi = {
|
||||
@@ -15,7 +14,6 @@ export const invoicesReportsApi = {
|
||||
|
||||
const token = localStorage.getItem('access_token');
|
||||
const response = await fetch(endpoint, {
|
||||
method: 'POST',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Authorization': `Bearer ${token}`,
|
||||
@@ -25,14 +23,11 @@ export const invoicesReportsApi = {
|
||||
|
||||
if (!response.ok) throw new Error('Error al iniciar la generación');
|
||||
return await response.json();
|
||||
return await response.json();
|
||||
},
|
||||
|
||||
getTaskStatus: async (taskId: string) => {
|
||||
const endpoint = `${BASE_URL}/v1/a76/reports/importacion/facturas/tasks/${taskId}`;
|
||||
|
||||
const endpoint = `${BASE_URL}/v1/a76/reports/importacion/facturas/tasks/${taskId}`;
|
||||
|
||||
const token = localStorage.getItem('access_token');
|
||||
const response = await fetch(endpoint, {
|
||||
method: 'GET',
|
||||
|
||||
Reference in New Issue
Block a user