45 lines
2.4 KiB
Python
45 lines
2.4 KiB
Python
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. |