Files
PecHub/frontend/src/api/fascicoli.api.ts
T

143 lines
4.1 KiB
TypeScript

import apiClient from './client'
// ─── Tipi ─────────────────────────────────────────────────────────────────────
export interface FascicoloResponse {
id: string
tenant_id: string
titolo: string
numero_pratica: string | null
stato: 'aperto' | 'chiuso' | 'archiviato'
categoria: string | null
responsabile_id: string | null
scadenza: string | null
note: string | null
created_by: string | null
created_at: string
updated_at: string
message_count: number
}
export interface FascicoloCreate {
titolo: string
numero_pratica?: string | null
stato?: 'aperto' | 'chiuso' | 'archiviato'
categoria?: string | null
responsabile_id?: string | null
scadenza?: string | null
note?: string | null
}
export interface FascicoloUpdate {
titolo?: string
numero_pratica?: string | null
stato?: 'aperto' | 'chiuso' | 'archiviato'
categoria?: string | null
responsabile_id?: string | null
scadenza?: string | null
note?: string | null
}
export interface FascicoloMessageItem {
id: string
subject: string | null
from_address: string | null
to_addresses: string[] | null
direction: 'inbound' | 'outbound'
pec_type: string
state: string
mailbox_id: string
received_at: string | null
sent_at: string | null
created_at: string
added_at: string
}
export interface MessageFascicoloSummary {
id: string
titolo: string
numero_pratica: string | null
stato: 'aperto' | 'chiuso' | 'archiviato'
categoria: string | null
}
export interface FascicoloDeadlineResponse {
id: string
tenant_id: string
titolo: string
numero_pratica: string | null
stato: 'aperto' | 'chiuso' | 'archiviato'
categoria: string | null
responsabile_id: string | null
scadenza: string | null
note: string | null
created_at: string
updated_at: string
message_count: number
is_overdue: boolean
}
// ─── Client API ───────────────────────────────────────────────────────────────
export const fascicoliApi = {
/** Lista fascicoli con filtri opzionali */
list: (params?: {
stato?: string
responsabile_id?: string
search?: string
}) =>
apiClient
.get<FascicoloResponse[]>('/fascicoli', { params })
.then((r) => r.data),
/** Dettaglio fascicolo */
get: (id: string) =>
apiClient.get<FascicoloResponse>(`/fascicoli/${id}`).then((r) => r.data),
/** Crea fascicolo */
create: (data: FascicoloCreate) =>
apiClient.post<FascicoloResponse>('/fascicoli', data).then((r) => r.data),
/** Modifica fascicolo */
update: (id: string, data: FascicoloUpdate) =>
apiClient
.patch<FascicoloResponse>(`/fascicoli/${id}`, data)
.then((r) => r.data),
/** Elimina fascicolo */
delete: (id: string) =>
apiClient.delete(`/fascicoli/${id}`).then((r) => r.data),
/** Messaggi del fascicolo */
getMessages: (id: string) =>
apiClient
.get<FascicoloMessageItem[]>(`/fascicoli/${id}/messages`)
.then((r) => r.data),
/** Aggiungi messaggi al fascicolo */
addMessages: (id: string, message_ids: string[]) =>
apiClient
.post<{ added: number }>(`/fascicoli/${id}/messages`, { message_ids })
.then((r) => r.data),
/** Rimuovi messaggi dal fascicolo */
removeMessages: (id: string, message_ids: string[]) =>
apiClient
.delete<{ removed: number }>(`/fascicoli/${id}/messages`, {
data: { message_ids },
})
.then((r) => r.data),
/** Fascicoli a cui appartiene un messaggio */
getMessageFascicoli: (messageId: string) =>
apiClient
.get<MessageFascicoloSummary[]>(`/messages/${messageId}/fascicoli`)
.then((r) => r.data),
/** Scadenzario pratiche: fascicoli con scadenza imminente o scaduta */
scadenzario: (params?: { days_ahead?: number; include_overdue?: boolean }) =>
apiClient
.get<FascicoloDeadlineResponse[]>('/fascicoli/scadenzario', { params })
.then((r) => r.data),
}