demo seed change 7

This commit is contained in:
Urtzi Alfaro
2025-12-15 13:39:33 +01:00
parent 46bd4f77b6
commit 5642b5a0c0
14 changed files with 5653 additions and 780 deletions

View File

@@ -402,16 +402,92 @@ async def clone_demo_data_internal(
db.add(stock)
records_cloned += 1
# Clone stock movements (for waste tracking and sustainability metrics)
from app.models.inventory import StockMovement, StockMovementType
for movement_data in seed_data.get('stock_movements', []):
# Transform ID
from shared.utils.demo_id_transformer import transform_id
try:
movement_uuid = UUID(movement_data['id'])
tenant_uuid = UUID(virtual_tenant_id)
transformed_id = transform_id(movement_data['id'], tenant_uuid)
except ValueError:
import hashlib
movement_id_string = movement_data['id']
tenant_uuid = UUID(virtual_tenant_id)
combined = f"{movement_id_string}-{tenant_uuid}"
hash_obj = hashlib.sha256(combined.encode('utf-8'))
transformed_id = UUID(hash_obj.hexdigest()[:32])
# Transform dates
movement_data['movement_date'] = parse_date_field(
movement_data.get('movement_date'), session_time, 'movement_date'
) or session_time
movement_data['created_at'] = parse_date_field(
movement_data.get('created_at'), session_time, 'created_at'
) or session_time
# Transform related IDs
if 'ingredient_id' in movement_data:
ingredient_id_str = movement_data['ingredient_id']
try:
transformed_ingredient_id = transform_id(ingredient_id_str, tenant_uuid)
movement_data['ingredient_id'] = str(transformed_ingredient_id)
except ValueError as e:
logger.error("Failed to transform ingredient_id in movement",
original_id=ingredient_id_str, error=str(e))
raise HTTPException(status_code=400, detail=f"Invalid ingredient_id: {str(e)}")
if 'stock_id' in movement_data and movement_data['stock_id']:
stock_id_str = movement_data['stock_id']
try:
transformed_stock_id = transform_id(stock_id_str, tenant_uuid)
movement_data['stock_id'] = str(transformed_stock_id)
except ValueError:
# If stock_id doesn't exist or can't be transformed, set to None
movement_data['stock_id'] = None
if 'supplier_id' in movement_data and movement_data['supplier_id']:
supplier_id_str = movement_data['supplier_id']
try:
transformed_supplier_id = transform_id(supplier_id_str, tenant_uuid)
movement_data['supplier_id'] = str(transformed_supplier_id)
except ValueError:
movement_data['supplier_id'] = None
if 'created_by' in movement_data and movement_data['created_by']:
created_by_str = movement_data['created_by']
try:
transformed_created_by = transform_id(created_by_str, tenant_uuid)
movement_data['created_by'] = str(transformed_created_by)
except ValueError:
movement_data['created_by'] = None
# Remove original id and tenant_id
movement_data.pop('id', None)
movement_data.pop('tenant_id', None)
# Create stock movement
stock_movement = StockMovement(
id=str(transformed_id),
tenant_id=str(virtual_tenant_id),
**movement_data
)
db.add(stock_movement)
records_cloned += 1
# Note: Edge cases are now handled exclusively through JSON seed data
# The seed data files already contain comprehensive edge cases including:
# - Low stock items below reorder points
# - Items expiring soon
# - Freshly received stock
# - Waste movements for sustainability tracking
# This ensures standardization and single source of truth for demo data
logger.info(
"Edge cases handled by JSON seed data - no manual creation needed",
seed_data_edge_cases="low_stock, expiring_soon, fresh_stock"
seed_data_edge_cases="low_stock, expiring_soon, fresh_stock, waste_movements"
)
await db.commit()
@@ -424,7 +500,8 @@ async def clone_demo_data_internal(
records_cloned=records_cloned,
duration_ms=duration_ms,
ingredients_cloned=len(seed_data.get('ingredients', [])),
stock_batches_cloned=len(seed_data.get('stock', []))
stock_batches_cloned=len(seed_data.get('stock', [])),
stock_movements_cloned=len(seed_data.get('stock_movements', []))
)
return {