77 lines
1.6 KiB
TypeScript
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;
|
|
},
|
|
};
|