vbox funzionanti

This commit is contained in:
2026-03-19 11:41:10 +01:00
parent 538d6a6bec
commit b7f7c1f7c0
32 changed files with 6043 additions and 262 deletions
+24
View File
@@ -8,6 +8,8 @@ import type {
export interface MessageFilters {
page?: number
page_size?: number
/** Filtra per Virtual Box assegnata all'utente corrente */
vbox_id?: string
mailbox_id?: string
direction?: 'inbound' | 'outbound'
state?: string
@@ -17,6 +19,17 @@ export interface MessageFilters {
search?: string
}
export interface MessageBulkUpdatePayload {
ids: string[]
is_starred?: boolean
is_archived?: boolean
}
export interface MessageBulkUpdateResponse {
updated: number
items: MessageResponse[]
}
export const messagesApi = {
list: (filters: MessageFilters = {}) =>
apiClient
@@ -42,6 +55,17 @@ export const messagesApi = {
.patch<MessageResponse>(`/messages/${id}`, { is_archived: true })
.then((r) => r.data),
unarchive: (id: string) =>
apiClient
.patch<MessageResponse>(`/messages/${id}`, { is_archived: false })
.then((r) => r.data),
/** Aggiorna in blocco is_starred e/o is_archived su più messaggi */
bulkUpdate: (payload: MessageBulkUpdatePayload) =>
apiClient
.patch<MessageBulkUpdateResponse>('/messages/bulk', payload)
.then((r) => r.data),
getAttachments: (id: string) =>
apiClient.get<AttachmentResponse[]>(`/messages/${id}/attachments`).then((r) => r.data),
+81
View File
@@ -0,0 +1,81 @@
import apiClient from './client'
import type {
ChannelTestResult,
NotificationChannelCreate,
NotificationChannelListResponse,
NotificationChannelResponse,
NotificationChannelUpdate,
NotificationLogListResponse,
NotificationRuleCreate,
NotificationRuleListResponse,
NotificationRuleResponse,
NotificationRuleUpdate,
} from '@/types/api.types'
export const notificationsApi = {
// ── Channels ───────────────────────────────────────────────────────────────
/** Crea un canale di notifica. */
createChannel: (data: NotificationChannelCreate) =>
apiClient
.post<NotificationChannelResponse>('/notifications/channels', data)
.then((r) => r.data),
/** Lista canali. */
listChannels: (params?: { page?: number; page_size?: number }) =>
apiClient
.get<NotificationChannelListResponse>('/notifications/channels', { params })
.then((r) => r.data),
/** Dettaglio canale. */
getChannel: (id: string) =>
apiClient
.get<NotificationChannelResponse>(`/notifications/channels/${id}`)
.then((r) => r.data),
/** Aggiorna canale. */
updateChannel: (id: string, data: NotificationChannelUpdate) =>
apiClient
.patch<NotificationChannelResponse>(`/notifications/channels/${id}`, data)
.then((r) => r.data),
/** Elimina canale. */
deleteChannel: (id: string) => apiClient.delete(`/notifications/channels/${id}`),
/** Test canale. */
testChannel: (id: string) =>
apiClient
.post<ChannelTestResult>(`/notifications/channels/${id}/test`)
.then((r) => r.data),
// ── Rules ──────────────────────────────────────────────────────────────────
/** Crea una regola. */
createRule: (data: NotificationRuleCreate) =>
apiClient
.post<NotificationRuleResponse>('/notifications/rules', data)
.then((r) => r.data),
/** Lista regole. */
listRules: (params?: { channel_id?: string; page?: number; page_size?: number }) =>
apiClient
.get<NotificationRuleListResponse>('/notifications/rules', { params })
.then((r) => r.data),
/** Aggiorna regola. */
updateRule: (id: string, data: NotificationRuleUpdate) =>
apiClient
.patch<NotificationRuleResponse>(`/notifications/rules/${id}`, data)
.then((r) => r.data),
/** Elimina regola. */
deleteRule: (id: string) => apiClient.delete(`/notifications/rules/${id}`),
// ── Logs ───────────────────────────────────────────────────────────────────
/** Lista log notifiche. */
listLogs: (params?: { channel_id?: string; page?: number; page_size?: number }) =>
apiClient
.get<NotificationLogListResponse>('/notifications/logs', { params })
.then((r) => r.data),
}
+78
View File
@@ -0,0 +1,78 @@
import apiClient from './client'
import type {
AssignedUserResponse,
MailboxBriefResponse,
VirtualBoxAssignmentResponse,
VirtualBoxAssignRequest,
VirtualBoxCreate,
VirtualBoxListResponse,
VirtualBoxMailboxAssignRequest,
VirtualBoxResponse,
VirtualBoxRuleCreate,
VirtualBoxUpdate,
} from '@/types/api.types'
export const virtualBoxesApi = {
/** Crea una nuova Virtual Box. */
create: (data: VirtualBoxCreate) =>
apiClient.post<VirtualBoxResponse>('/virtual-boxes', data).then((r) => r.data),
/** Lista Virtual Box del tenant. */
list: (params?: { page?: number; page_size?: number; active_only?: boolean }) =>
apiClient
.get<VirtualBoxListResponse>('/virtual-boxes', { params })
.then((r) => r.data),
/** Virtual Box assegnate all'utente corrente. */
myVirtualBoxes: () =>
apiClient.get<VirtualBoxResponse[]>('/virtual-boxes/my').then((r) => r.data),
/** Dettaglio Virtual Box. */
get: (id: string) =>
apiClient.get<VirtualBoxResponse>(`/virtual-boxes/${id}`).then((r) => r.data),
/** Aggiorna Virtual Box (incluse caselle se fornito mailbox_ids). */
update: (id: string, data: VirtualBoxUpdate) =>
apiClient.patch<VirtualBoxResponse>(`/virtual-boxes/${id}`, data).then((r) => r.data),
/** Elimina Virtual Box. */
delete: (id: string) => apiClient.delete(`/virtual-boxes/${id}`),
/** Sostituisce le regole di una Virtual Box. */
replaceRules: (id: string, rules: VirtualBoxRuleCreate[]) =>
apiClient
.put<VirtualBoxResponse>(`/virtual-boxes/${id}/rules`, rules)
.then((r) => r.data),
// ─── Caselle reali ─────────────────────────────────────────────────────────
/** Imposta le caselle PEC reali associate (sostituzione completa). */
setMailboxes: (id: string, data: VirtualBoxMailboxAssignRequest) =>
apiClient
.put<VirtualBoxResponse>(`/virtual-boxes/${id}/mailboxes`, data)
.then((r) => r.data),
/** Lista caselle PEC reali associate. */
listMailboxes: (id: string) =>
apiClient
.get<MailboxBriefResponse[]>(`/virtual-boxes/${id}/mailboxes`)
.then((r) => r.data),
// ─── Assegnazioni utenti ───────────────────────────────────────────────────
/** Assegna utenti a una Virtual Box. */
assignUsers: (id: string, data: VirtualBoxAssignRequest) =>
apiClient
.post<VirtualBoxAssignmentResponse[]>(`/virtual-boxes/${id}/assignments`, data)
.then((r) => r.data),
/** Rimuovi assegnazione utente. */
unassignUser: (vboxId: string, userId: string) =>
apiClient.delete(`/virtual-boxes/${vboxId}/assignments/${userId}`),
/** Lista utenti assegnati. */
listAssignedUsers: (id: string) =>
apiClient
.get<AssignedUserResponse[]>(`/virtual-boxes/${id}/assignments`)
.then((r) => r.data),
}