Improve the frontend 3
This commit is contained in:
@@ -504,6 +504,112 @@ class InventoryServiceClient(BaseServiceClient):
|
||||
error=str(e), tenant_id=tenant_id)
|
||||
return None
|
||||
|
||||
# ================================================================
|
||||
# BATCH OPERATIONS (NEW - for Orchestrator optimization)
|
||||
# ================================================================
|
||||
|
||||
async def get_ingredients_batch(
|
||||
self,
|
||||
tenant_id: str,
|
||||
ingredient_ids: List[UUID]
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Fetch multiple ingredients in a single request.
|
||||
|
||||
This method reduces N API calls to 1, significantly improving
|
||||
performance when fetching data for multiple ingredients.
|
||||
|
||||
Args:
|
||||
tenant_id: Tenant ID
|
||||
ingredient_ids: List of ingredient IDs to fetch
|
||||
|
||||
Returns:
|
||||
Dict with 'ingredients', 'found_count', and 'missing_ids'
|
||||
"""
|
||||
try:
|
||||
if not ingredient_ids:
|
||||
return {
|
||||
'ingredients': [],
|
||||
'found_count': 0,
|
||||
'missing_ids': []
|
||||
}
|
||||
|
||||
# Convert UUIDs to strings for JSON serialization
|
||||
ids_str = [str(id) for id in ingredient_ids]
|
||||
|
||||
result = await self.post(
|
||||
"inventory/operations/ingredients/batch",
|
||||
data={"ingredient_ids": ids_str},
|
||||
tenant_id=tenant_id
|
||||
)
|
||||
|
||||
if result:
|
||||
logger.info(
|
||||
"Retrieved ingredients in batch",
|
||||
requested=len(ingredient_ids),
|
||||
found=result.get('found_count', 0),
|
||||
tenant_id=tenant_id
|
||||
)
|
||||
|
||||
return result or {'ingredients': [], 'found_count': 0, 'missing_ids': ids_str}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
"Error fetching ingredients in batch",
|
||||
error=str(e),
|
||||
count=len(ingredient_ids),
|
||||
tenant_id=tenant_id
|
||||
)
|
||||
return {'ingredients': [], 'found_count': 0, 'missing_ids': [str(id) for id in ingredient_ids]}
|
||||
|
||||
async def get_stock_levels_batch(
|
||||
self,
|
||||
tenant_id: str,
|
||||
ingredient_ids: List[UUID]
|
||||
) -> Dict[str, float]:
|
||||
"""
|
||||
Fetch stock levels for multiple ingredients in a single request.
|
||||
|
||||
Args:
|
||||
tenant_id: Tenant ID
|
||||
ingredient_ids: List of ingredient IDs
|
||||
|
||||
Returns:
|
||||
Dict mapping ingredient_id (str) to stock level (float)
|
||||
"""
|
||||
try:
|
||||
if not ingredient_ids:
|
||||
return {}
|
||||
|
||||
# Convert UUIDs to strings for JSON serialization
|
||||
ids_str = [str(id) for id in ingredient_ids]
|
||||
|
||||
result = await self.post(
|
||||
"inventory/operations/stock-levels/batch",
|
||||
data={"ingredient_ids": ids_str},
|
||||
tenant_id=tenant_id
|
||||
)
|
||||
|
||||
stock_levels = result.get('stock_levels', {}) if result else {}
|
||||
|
||||
logger.info(
|
||||
"Retrieved stock levels in batch",
|
||||
requested=len(ingredient_ids),
|
||||
found=len(stock_levels),
|
||||
tenant_id=tenant_id
|
||||
)
|
||||
|
||||
return stock_levels
|
||||
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
"Error fetching stock levels in batch",
|
||||
error=str(e),
|
||||
count=len(ingredient_ids),
|
||||
tenant_id=tenant_id
|
||||
)
|
||||
return {}
|
||||
|
||||
# ================================================================
|
||||
# UTILITY METHODS
|
||||
# ================================================================
|
||||
|
||||
Reference in New Issue
Block a user