Files
PecHub/frontend/src/api/reports.api.ts
T
2026-03-27 13:54:07 +01:00

100 lines
2.8 KiB
TypeScript

/**
* API client per la Dashboard e Reportistica (Fase 7).
*/
import { apiClient } from './client'
// ─── Tipi ─────────────────────────────────────────────────────────────────────
export interface KpiSummary {
received_today: number
sent_today: number
received_7d: number
sent_7d: number
received_30d: number
sent_30d: number
anomalie_attive: number
tasso_consegna: number
caselle_in_errore: number
messaggi_non_letti: number
totale_messaggi: number
}
export interface DailyStat {
day: string // "YYYY-MM-DD"
received: number
sent: number
}
export interface OutboundStateStat {
state: string
count: number
}
export interface MailboxStat {
mailbox_id: string
email_address: string
display_name: string | null
status: string
received_total: number
sent_total: number
anomalie: number
non_letti: number
last_sync_at: string | null
}
export interface ReportSummaryResponse {
generated_at: string
period_days: number
kpi: KpiSummary
daily_stats: DailyStat[]
outbound_states: OutboundStateStat[]
mailbox_stats: MailboxStat[]
}
// ─── API ──────────────────────────────────────────────────────────────────────
export const reportsApi = {
/**
* Recupera il riepilogo KPI + grafici per la dashboard.
* @param days Numero di giorni per la serie storica (default 7)
*/
getSummary: async (days = 7): Promise<ReportSummaryResponse> => {
const res = await apiClient.get<ReportSummaryResponse>('/reports/summary', {
params: { days },
})
return res.data
},
/**
* Scarica il report in formato CSV.
* Il browser riceverà un file da scaricare.
*/
exportCsv: (params?: {
date_from?: string
date_to?: string
mailbox_id?: string
}) => {
const url = new URL('/api/v1/reports/export', window.location.origin)
url.searchParams.set('format', 'csv')
if (params?.date_from) url.searchParams.set('date_from', params.date_from)
if (params?.date_to) url.searchParams.set('date_to', params.date_to)
if (params?.mailbox_id) url.searchParams.set('mailbox_id', params.mailbox_id)
return url.toString()
},
/**
* Scarica il report in formato PDF.
*/
exportPdf: (params?: {
date_from?: string
date_to?: string
}) => {
const url = new URL('/api/v1/reports/export', window.location.origin)
url.searchParams.set('format', 'pdf')
if (params?.date_from) url.searchParams.set('date_from', params.date_from)
if (params?.date_to) url.searchParams.set('date_to', params.date_to)
return url.toString()
},
}