Add helper functions for School

This commit is contained in:
Backend IM Bot 2025-03-27 21:20:26 +00:00
parent 8800860562
commit 78fe929216

112
helpers/school_helpers.py Normal file
View File

@ -0,0 +1,112 @@
from typing import List, Dict, Optional, Union, Any
from datetime import datetime
from sqlalchemy.orm import Session
from models.school import School
from schemas.school import SchoolCreate, SchoolUpdate
def validate_storage_type(storage_type: str) -> bool:
"""
Validate if storage type is one of the allowed values.
Args:
storage_type: The storage type to validate
Returns:
bool: True if storage type is valid, False otherwise
"""
valid_types = ['Warehouse', 'Cold Storage', 'Secure Vault', 'General Storage']
return storage_type in valid_types
def validate_security_level(security_level: str) -> bool:
"""
Validate if security level is one of the allowed values.
Args:
security_level: The security level to validate
Returns:
bool: True if security level is valid, False otherwise
"""
valid_levels = ['Low', 'Medium', 'High', 'Maximum']
return security_level in valid_levels
def calculate_available_space(total_space: int, occupied_space: int) -> int:
"""
Calculate available storage space.
Args:
total_space: Total square footage
occupied_space: Currently occupied space
Returns:
int: Available space in square feet
"""
available = total_space - occupied_space
return max(0, available)
def check_capacity_limits(current_capacity: int, requested_space: int) -> bool:
"""
Check if requested storage space is within capacity limits.
Args:
current_capacity: Current storage capacity
requested_space: Requested additional space
Returns:
bool: True if space is available, False otherwise
"""
return current_capacity >= requested_space
def get_available_temperature_controlled_facilities(
db: Session,
min_space: int = 0
) -> List[School]:
"""
Get list of available temperature controlled storage facilities.
Args:
db: Database session
min_space: Minimum space required
Returns:
List of School objects meeting the criteria
"""
return db.query(School).filter(
School.temperature_controlled == True,
School.is_active == True,
School.available_space >= min_space
).all()
def update_facility_space(
db: Session,
facility_id: int,
space_change: int
) -> Union[School, Dict[str, str]]:
"""
Update available space for a storage facility.
Args:
db: Database session
facility_id: ID of the facility to update
space_change: Change in space (positive for increase, negative for decrease)
Returns:
Updated School object or error dict
"""
facility = db.query(School).filter(School.id == facility_id).first()
if not facility:
return {"error": "Facility not found"}
new_available_space = facility.available_space - space_change
if new_available_space < 0:
return {"error": "Insufficient space available"}
if new_available_space > facility.square_footage:
return {"error": "Cannot exceed total facility space"}
facility.available_space = new_available_space
db.commit()
db.refresh(facility)
return facility