from sqlalchemy import Column, String, Integer, Boolean, DateTime, ForeignKey, Float from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy.sql import func from core.database import Base import uuid from datetime import datetime class Ride(Base): __tablename__ = "rides" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) pickup_location = Column(String, nullable=False) drop_location = Column(String, nullable=False) pickup_latitude = Column(Float, nullable=False) pickup_longitude = Column(Float, nullable=False) drop_latitude = Column(Float, nullable=False) drop_longitude = Column(Float, nullable=False) rider_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) driver_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True) ride_status = Column(String, nullable=False, default="requested") ride_distance = Column(Float, nullable=True) ride_duration = Column(Integer, nullable=True) ride_fare = Column(Float, nullable=True) created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) rider = relationship("User", foreign_keys=[rider_id], backref="rider_rides") driver = relationship("User", foreign_keys=[driver_id], backref="driver_rides") ``` This model includes the following columns: - `id`: A UUID primary key for the ride. - `pickup_location` and `drop_location`: Strings for the pickup and drop-off locations. - `pickup_latitude`, `pickup_longitude`, `drop_latitude`, and `drop_longitude`: Floats for the pickup and drop-off coordinates. - `rider_id` and `driver_id`: UUIDs for the rider and driver user IDs, with foreign key relationships to the `users` table. - `ride_status`: A string for the current status of the ride (e.g., "requested", "accepted", "completed"). - `ride_distance` and `ride_duration`: Floats and integers for the distance and duration of the ride. - `ride_fare`: A float for the fare amount of the ride. - `created_at` and `updated_at`: Datetime columns for when the ride was created and last updated. dispatch_status = Column(String, nullable=False, default='pending') dispatch_time = Column(DateTime, nullable=True) The model also includes relationships to the `User` model for the rider and driver, using the `rider_id` and `driver_id` foreign keys.