New alert service
This commit is contained in:
97
frontend/src/api/hooks/useInventoryStatus.ts
Normal file
97
frontend/src/api/hooks/useInventoryStatus.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* Direct Inventory Service Hook
|
||||
*
|
||||
* Phase 1 optimization: Call inventory service directly instead of through orchestrator.
|
||||
* Eliminates duplicate fetches and reduces orchestrator load.
|
||||
*/
|
||||
|
||||
import { useQuery, UseQueryResult } from '@tanstack/react-query';
|
||||
import { getTenantEndpoint } from '../../config/services';
|
||||
import { apiClient } from '../client';
|
||||
|
||||
export interface StockStatus {
|
||||
category: string;
|
||||
in_stock: number;
|
||||
low_stock: number;
|
||||
out_of_stock: number;
|
||||
total: number;
|
||||
}
|
||||
|
||||
export interface InventoryOverview {
|
||||
out_of_stock_count: number;
|
||||
low_stock_count: number;
|
||||
adequate_stock_count: number;
|
||||
total_ingredients: number;
|
||||
total_value?: number;
|
||||
tenant_id: string;
|
||||
timestamp: string;
|
||||
}
|
||||
|
||||
export interface SustainabilityWidget {
|
||||
waste_reduction_percentage: number;
|
||||
local_sourcing_percentage: number;
|
||||
seasonal_usage_percentage: number;
|
||||
carbon_footprint_score?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch inventory overview directly from inventory service
|
||||
*/
|
||||
export const useInventoryOverview = (
|
||||
tenantId: string,
|
||||
options?: {
|
||||
enabled?: boolean;
|
||||
refetchInterval?: number;
|
||||
}
|
||||
): UseQueryResult<InventoryOverview> => {
|
||||
return useQuery({
|
||||
queryKey: ['inventory', 'overview', tenantId],
|
||||
queryFn: async () => {
|
||||
const url = getTenantEndpoint('inventory', tenantId, 'inventory/dashboard/overview');
|
||||
return await apiClient.get(url);
|
||||
},
|
||||
staleTime: 30000, // 30s cache
|
||||
refetchInterval: options?.refetchInterval,
|
||||
enabled: options?.enabled ?? true,
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetch stock status by category directly from inventory service
|
||||
*/
|
||||
export const useStockStatusByCategory = (
|
||||
tenantId: string,
|
||||
options?: {
|
||||
enabled?: boolean;
|
||||
}
|
||||
): UseQueryResult<StockStatus[]> => {
|
||||
return useQuery({
|
||||
queryKey: ['inventory', 'stock-status', tenantId],
|
||||
queryFn: async () => {
|
||||
const url = getTenantEndpoint('inventory', tenantId, 'inventory/dashboard/stock-status');
|
||||
return await apiClient.get(url);
|
||||
},
|
||||
staleTime: 30000,
|
||||
enabled: options?.enabled ?? true,
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetch sustainability widget data directly from inventory service
|
||||
*/
|
||||
export const useSustainabilityWidget = (
|
||||
tenantId: string,
|
||||
options?: {
|
||||
enabled?: boolean;
|
||||
}
|
||||
): UseQueryResult<SustainabilityWidget> => {
|
||||
return useQuery({
|
||||
queryKey: ['inventory', 'sustainability', 'widget', tenantId],
|
||||
queryFn: async () => {
|
||||
const url = getTenantEndpoint('inventory', tenantId, 'sustainability/widget');
|
||||
return await apiClient.get(url);
|
||||
},
|
||||
staleTime: 60000, // 60s cache (changes less frequently)
|
||||
enabled: options?.enabled ?? true,
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user