from datetime import datetime, timezone from typing import Optional, Dict, Union from sqlalchemy.orm import Session from sqlalchemy import func from models.server_time import ServerTime def get_current_utc_time() -> datetime: """ Get current UTC timestamp. Returns: datetime: Current UTC datetime """ return datetime.now(timezone.utc) def validate_timestamp(timestamp: datetime) -> bool: """ Validate if timestamp is a valid datetime and not in future. Args: timestamp: Datetime to validate Returns: bool: True if valid, False otherwise """ current_time = get_current_utc_time() return timestamp <= current_time def record_server_time(db: Session) -> ServerTime: """ Record current server time in database. Args: db: Database session Returns: ServerTime: Recorded server time entry """ server_time = ServerTime(server_time=func.now()) db.add(server_time) db.commit() db.refresh(server_time) return server_time def get_latest_server_time(db: Session) -> Optional[ServerTime]: """ Get most recent server time record. Args: db: Database session Returns: Optional[ServerTime]: Latest server time record if exists """ return db.query(ServerTime).order_by(ServerTime.server_time.desc()).first() def get_time_difference(time1: datetime, time2: datetime) -> float: """ Calculate time difference in seconds between two timestamps. Args: time1: First timestamp time2: Second timestamp Returns: float: Time difference in seconds """ return abs((time1 - time2).total_seconds()) def format_server_time(server_time: datetime, format: str = "%Y-%m-%d %H:%M:%S") -> str: """ Format server time to string representation. Args: server_time: Datetime to format format: Output format string Returns: str: Formatted datetime string """ return server_time.strftime(format)