mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-04 16:02:08 +00:00
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
|
|
import { API_PATHS } from "@/api/api-paths";
|
||
|
|
import { apiGet } from "@/api/api";
|
||
|
|
import { handleApiResponse } from "@/api/handle-api-response";
|
||
|
|
import type { DashboardStats } from "@/domain/dashboard/types/dashboard-stats";
|
||
|
|
|
||
|
|
function toNumber(value: unknown): number {
|
||
|
|
if (typeof value === "number" && Number.isFinite(value)) {
|
||
|
|
return value;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (typeof value === "string" && value.trim() !== "") {
|
||
|
|
const parsed = Number(value);
|
||
|
|
return Number.isFinite(parsed) ? parsed : 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
function mapDashboardStats(raw: unknown): DashboardStats {
|
||
|
|
const data = (typeof raw === "object" && raw !== null ? raw : {}) as Record<string, unknown>;
|
||
|
|
|
||
|
|
return {
|
||
|
|
open: toNumber(data.open ?? data.Open),
|
||
|
|
notDispatched: toNumber(data.notDispatched ?? data.NotDispatched),
|
||
|
|
completed: toNumber(data.completed ?? data.Completed),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export const dashboardApi = {
|
||
|
|
getStats: async (): Promise<DashboardStats> => {
|
||
|
|
const data = await apiGet<unknown>(API_PATHS.dashboard.stats);
|
||
|
|
const response = handleApiResponse<unknown>(data);
|
||
|
|
return mapDashboardStats(response);
|
||
|
|
},
|
||
|
|
};
|