143 lines
4.1 KiB
TypeScript
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),
|
|
}
|