xpeditis2.0/apps/frontend/lib/api/dashboard.ts
David-Henri ARNAUD 07258e5adb feature phase 3
2025-10-13 13:58:39 +02:00

77 lines
1.6 KiB
TypeScript

/**
* Dashboard API Client
*/
import { apiClient } from './client';
export interface DashboardKPIs {
bookingsThisMonth: number;
totalTEUs: number;
estimatedRevenue: number;
pendingConfirmations: number;
bookingsThisMonthChange: number;
totalTEUsChange: number;
estimatedRevenueChange: number;
pendingConfirmationsChange: number;
}
export interface BookingsChartData {
labels: string[];
data: number[];
}
export interface TopTradeLane {
route: string;
originPort: string;
destinationPort: string;
bookingCount: number;
totalTEUs: number;
avgPrice: number;
}
export interface DashboardAlert {
id: string;
type: 'delay' | 'confirmation' | 'document' | 'payment' | 'info';
severity: 'low' | 'medium' | 'high' | 'critical';
title: string;
message: string;
bookingId?: string;
bookingNumber?: string;
createdAt: string;
isRead: boolean;
}
export const dashboardApi = {
/**
* Get dashboard KPIs
*/
async getKPIs(): Promise<DashboardKPIs> {
const { data } = await apiClient.get('/api/v1/dashboard/kpis');
return data;
},
/**
* Get bookings chart data
*/
async getBookingsChart(): Promise<BookingsChartData> {
const { data } = await apiClient.get('/api/v1/dashboard/bookings-chart');
return data;
},
/**
* Get top trade lanes
*/
async getTopTradeLanes(): Promise<TopTradeLane[]> {
const { data } = await apiClient.get('/api/v1/dashboard/top-trade-lanes');
return data;
},
/**
* Get dashboard alerts
*/
async getAlerts(): Promise<DashboardAlert[]> {
const { data } = await apiClient.get('/api/v1/dashboard/alerts');
return data;
},
};