vvv-sge23a/helpers/school_helpers.py
2025-03-27 21:20:26 +00:00

112 lines
3.2 KiB
Python

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