feat: add audit log viewing for vendor and tenant personas
Vendor sees all audit events with tenant filter at /vendor/audit. Tenant admin sees only their own events at /tenant/audit. Both support pagination, action/result filters, and text search. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { api } from './client';
|
||||
import type { DashboardData, TenantLicenseData, TenantSettings } from '../types/api';
|
||||
import type { DashboardData, TenantLicenseData, TenantSettings, AuditLogPage, AuditLogFilters } from '../types/api';
|
||||
|
||||
export function useTenantDashboard() {
|
||||
return useQuery<DashboardData>({
|
||||
@@ -61,3 +61,19 @@ export function useTenantSettings() {
|
||||
queryFn: () => api.get('/tenant/settings'),
|
||||
});
|
||||
}
|
||||
|
||||
export function useTenantAuditLog(filters: Omit<AuditLogFilters, 'tenantId'>) {
|
||||
const params = new URLSearchParams();
|
||||
if (filters.action) params.set('action', filters.action);
|
||||
if (filters.result) params.set('result', filters.result);
|
||||
if (filters.search) params.set('search', filters.search);
|
||||
if (filters.from) params.set('from', filters.from);
|
||||
if (filters.to) params.set('to', filters.to);
|
||||
params.set('page', String(filters.page ?? 0));
|
||||
params.set('size', String(filters.size ?? 25));
|
||||
|
||||
return useQuery<AuditLogPage>({
|
||||
queryKey: ['tenant', 'audit', filters],
|
||||
queryFn: () => api.get(`/tenant/audit?${params.toString()}`),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { api } from './client';
|
||||
import type { VendorTenantSummary, VendorTenantDetail, CreateTenantRequest, TenantResponse, LicenseResponse } from '../types/api';
|
||||
import type { VendorTenantSummary, VendorTenantDetail, CreateTenantRequest, TenantResponse, LicenseResponse, AuditLogPage, AuditLogFilters } from '../types/api';
|
||||
|
||||
export function useVendorTenants() {
|
||||
return useQuery<VendorTenantSummary[]>({
|
||||
@@ -57,3 +57,20 @@ export function useRenewLicense() {
|
||||
onSuccess: (_, tenantId) => qc.invalidateQueries({ queryKey: ['vendor', 'tenants', tenantId] }),
|
||||
});
|
||||
}
|
||||
|
||||
export function useVendorAuditLog(filters: AuditLogFilters) {
|
||||
const params = new URLSearchParams();
|
||||
if (filters.tenantId) params.set('tenantId', filters.tenantId);
|
||||
if (filters.action) params.set('action', filters.action);
|
||||
if (filters.result) params.set('result', filters.result);
|
||||
if (filters.search) params.set('search', filters.search);
|
||||
if (filters.from) params.set('from', filters.from);
|
||||
if (filters.to) params.set('to', filters.to);
|
||||
params.set('page', String(filters.page ?? 0));
|
||||
params.set('size', String(filters.size ?? 25));
|
||||
|
||||
return useQuery<AuditLogPage>({
|
||||
queryKey: ['vendor', 'audit', filters],
|
||||
queryFn: () => api.get(`/vendor/audit?${params.toString()}`),
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user