feat: Add helper functions for Ride

This commit is contained in:
Backend IM Bot 2025-04-09 19:40:59 +00:00
parent 8285591282
commit 4394fa0a18

85
helpers/ride_helpers.py Normal file
View File

@ -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