diff --git a/helpers/servertime_helpers.py b/helpers/servertime_helpers.py new file mode 100644 index 0000000..7bf8904 --- /dev/null +++ b/helpers/servertime_helpers.py @@ -0,0 +1,81 @@ +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) \ No newline at end of file