Improve teh securty of teh DB

This commit is contained in:
Urtzi Alfaro
2025-10-19 19:22:37 +02:00
parent 62971c07d7
commit 05da20357d
87 changed files with 7998 additions and 932 deletions

View File

@@ -1386,4 +1386,146 @@ class ProductionService:
except Exception as e:
logger.error("Error getting batch with transformations",
error=str(e), batch_id=str(batch_id), tenant_id=str(tenant_id))
return {}
return {}
# ================================================================
# EQUIPMENT MANAGEMENT METHODS
# ================================================================
async def get_equipment_list(
self,
tenant_id: UUID,
filters: Dict[str, Any],
page: int = 1,
page_size: int = 50
) -> Dict[str, Any]:
"""Get list of equipment with filtering and pagination"""
try:
async with self.database_manager.get_session() as session:
from app.repositories.equipment_repository import EquipmentRepository
equipment_repo = EquipmentRepository(session)
# Apply filters
filter_dict = {k: v for k, v in filters.items() if v is not None}
filter_dict["tenant_id"] = str(tenant_id)
# Get equipment with pagination
equipment_list = await equipment_repo.get_equipment_filtered(filter_dict, page, page_size)
total_count = await equipment_repo.count_equipment_filtered(filter_dict)
# Convert to response format
from app.schemas.equipment import EquipmentResponse
equipment_responses = [
EquipmentResponse.model_validate(eq) for eq in equipment_list
]
return {
"equipment": equipment_responses,
"total_count": total_count,
"page": page,
"page_size": page_size
}
except Exception as e:
logger.error("Error getting equipment list",
error=str(e), tenant_id=str(tenant_id))
raise
async def get_equipment(self, tenant_id: UUID, equipment_id: UUID):
"""Get a specific equipment item"""
try:
async with self.database_manager.get_session() as session:
from app.repositories.equipment_repository import EquipmentRepository
equipment_repo = EquipmentRepository(session)
equipment = await equipment_repo.get_equipment_by_id(tenant_id, equipment_id)
if not equipment:
return None
logger.info("Retrieved equipment",
equipment_id=str(equipment_id), tenant_id=str(tenant_id))
return equipment
except Exception as e:
logger.error("Error getting equipment",
error=str(e), equipment_id=str(equipment_id), tenant_id=str(tenant_id))
raise
async def create_equipment(self, tenant_id: UUID, equipment_data):
"""Create a new equipment item"""
try:
async with self.database_manager.get_session() as session:
from app.repositories.equipment_repository import EquipmentRepository
equipment_repo = EquipmentRepository(session)
# Prepare equipment data
equipment_dict = equipment_data.model_dump()
equipment_dict["tenant_id"] = tenant_id
# Create equipment
equipment = await equipment_repo.create_equipment(equipment_dict)
logger.info("Created equipment",
equipment_id=str(equipment.id), tenant_id=str(tenant_id))
return equipment
except Exception as e:
logger.error("Error creating equipment",
error=str(e), tenant_id=str(tenant_id))
raise
async def update_equipment(self, tenant_id: UUID, equipment_id: UUID, equipment_update):
"""Update an equipment item"""
try:
async with self.database_manager.get_session() as session:
from app.repositories.equipment_repository import EquipmentRepository
equipment_repo = EquipmentRepository(session)
# First verify equipment belongs to tenant
equipment = await equipment_repo.get_equipment_by_id(tenant_id, equipment_id)
if not equipment:
return None
# Update equipment
updated_equipment = await equipment_repo.update_equipment(
equipment_id,
equipment_update.model_dump(exclude_none=True)
)
logger.info("Updated equipment",
equipment_id=str(equipment_id), tenant_id=str(tenant_id))
return updated_equipment
except Exception as e:
logger.error("Error updating equipment",
error=str(e), equipment_id=str(equipment_id), tenant_id=str(tenant_id))
raise
async def delete_equipment(self, tenant_id: UUID, equipment_id: UUID) -> bool:
"""Delete (soft delete) an equipment item"""
try:
async with self.database_manager.get_session() as session:
from app.repositories.equipment_repository import EquipmentRepository
equipment_repo = EquipmentRepository(session)
# First verify equipment belongs to tenant
equipment = await equipment_repo.get_equipment_by_id(tenant_id, equipment_id)
if not equipment:
return False
# Soft delete equipment
success = await equipment_repo.delete_equipment(equipment_id)
logger.info("Deleted equipment",
equipment_id=str(equipment_id), tenant_id=str(tenant_id))
return success
except Exception as e:
logger.error("Error deleting equipment",
error=str(e), equipment_id=str(equipment_id), tenant_id=str(tenant_id))
raise