From 4394fa0a186193e0261e47f62be154961a06be5f Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Wed, 9 Apr 2025 19:40:59 +0000 Subject: [PATCH] feat: Add helper functions for Ride --- helpers/ride_helpers.py | 85 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 helpers/ride_helpers.py diff --git a/helpers/ride_helpers.py b/helpers/ride_helpers.py new file mode 100644 index 0000000..6c59774 --- /dev/null +++ b/helpers/ride_helpers.py @@ -0,0 +1,85 @@ +from typing import List, Optional +from uuid import UUID +from datetime import datetime +from pydantic import BaseModel +from sqlalchemy.orm import Session +from models.ride import Ride +from schemas.ride import RideCreate, RideSchema + +def get_all_rides(db: Session) -> List[Ride]: + """ + Get all rides from the database. + + Args: + db (Session): SQLAlchemy database session. + + Returns: + List[Ride]: List of Ride objects. + """ + return db.query(Ride).all() + +def get_ride_by_id(db: Session, ride_id: UUID) -> Optional[Ride]: + """ + Get a ride by its ID. + + Args: + db (Session): SQLAlchemy database session. + ride_id (UUID): ID of the ride to retrieve. + + Returns: + Optional[Ride]: Ride object if found, None otherwise. + """ + return db.query(Ride).filter(Ride.id == ride_id).first() + +def create_ride(db: Session, ride: RideCreate) -> Ride: + """ + Create a new ride in the database. + + Args: + db (Session): SQLAlchemy database session. + ride (RideCreate): Pydantic model for creating a new ride. + + Returns: + Ride: The newly created Ride object. + """ + db_ride = Ride(**ride.dict()) + db.add(db_ride) + db.commit() + db.refresh(db_ride) + return db_ride + +def dispatch_ride(db: Session, ride: Ride) -> Ride: + """ + Dispatch a ride by updating its status and assigning a driver. + + Args: + db (Session): SQLAlchemy database session. + ride (Ride): Ride object to be dispatched. + + Returns: + Ride: The updated Ride object with a dispatched status. + """ + # Implement logic to assign a driver and update ride status + ride.ride_status = "dispatched" + ride.driver_id = get_available_driver(db) # Implement get_available_driver function + db.commit() + db.refresh(ride) + return ride + +def calculate_ride_fare(ride: Ride) -> float: + """ + Calculate the fare for a given ride based on distance and duration. + + Args: + ride (Ride): Ride object for which the fare needs to be calculated. + + Returns: + float: The calculated fare amount. + """ + # Implement logic to calculate fare based on ride distance and duration + base_fare = 5.0 + distance_rate = 1.5 # per km + duration_rate = 0.2 # per minute + + fare = base_fare + (ride.ride_distance * distance_rate) + (ride.ride_duration / 60 * duration_rate) + return fare \ No newline at end of file