コード例 #1
0
class CarPoolParticipant(db.Model):
    """
    Model of all car pool participants (e.g. driver + passengers)
    """

    id = db.Column(db.Integer, primary_key=True)
    participant_id = db.Column(db.Integer, primary_key=True)
    role = db.Column(db.Enum(RoleType), nullable=False)
    fare = db.Column(db.Float(precision=2), nullable=False)
    fare_currency = db.Column(db.Enum(CurrencyType), nullable=False)

    __tablename__ = "carpool_participants"
    __table_args__ = (
        db.ForeignKeyConstraint(["participant_id"], ["user.id"]),
    )
コード例 #2
0
class CarPool(db.Model):
    """
    Model of shared trip via car pooling
    """
    __tablename__ = "carpools"
    id = db.Column(db.Integer, primary_key=True)
    created_on = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    created_by = db.Column(db.Integer, db.ForeignKey("user.id"))

    start_date = db.Column(db.DateTime, nullable=False)
    end_date = db.Column(db.DateTime, nullable=False)

    car_model = db.Column(db.String, nullable=False)
    max_seats = db.Column(db.Integer, nullable=False)
    rental_id = db.Column(db.BigInteger, nullable=False)

    buy_in = db.Column(db.Float(precision=2), nullable=False)
    buy_in_currency = db.Column(db.Enum(CurrencyType), nullable=False)

    def __init__(self, **kwargs):
        super(CarPool, self).__init__(**kwargs)

    def validate(self):
        result = requests.get("{0}/rentals/{1}".format("http://localhost:5000/api/v1", self.rental_id))

        if result.status_code != 200:
            raise ValueError("Supplied rental ID not found")

        rental = json.loads(result.content)

        if self.start_date < parser.parse(rental["rental"]["pickup_time"]):
            raise ValueError("Trip start time can not be before pick up time")
        
        if self.end_date > parser.parse(rental["rental"]["return_time"]):
            raise ValueError("Trip end time can not be after return time")
        
        if self.car_model != rental["rental"]["car_name"]:
            raise ValueError("Car models do not match")
        
        passenger_constraint = int(rental["rental"]["max_passengers"]) - 1
        if self.max_seats > passenger_constraint:
            raise ValueError("Maximum seat count of {0} exceeded".format(passenger_constraint))
コード例 #3
0
class Cars(db.Model):
    __tablename__ = "cars"

    car_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    type = db.Column(db.String(80), nullable=False)
    full_price = db.Column(db.Integer, nullable=False)
    purchase_date = db.Column(db.DateTime, nullable=False)
    rental_price_day = db.Column(db.Integer, nullable=False) 
    avg_cost_day = db.Column(db.Integer, nullable=False)
コード例 #4
0
class CarRental(db.Model):
    __tablename__ = "car_rentals"
    
    id = db.Column(db.String, primary_key=True)
    driver_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    car_id = db.Column(db.Integer, db.ForeignKey("cars.car_id"))
    max_passengers = db.Column(db.Integer, nullable=False)
    imageurl = db.Column(db.String)
    route_id = db.Column(db.Integer, db.ForeignKey("routes.route_id"))
    pickup_time = db.Column(db.DateTime, nullable=False)
    return_time = db.Column(db.DateTime, nullable=False)

    def __init__(self, **kwargs):
        super(CarRental, self).__init__(**kwargs)
        self.max_passengers = 4
コード例 #5
0
class CarPoolRequest(db.Model):
    """
    Model of open requests to join a car pool
    """

    id = db.Column(db.Integer, primary_key=True)
    requested_pool = db.Column(db.Integer, db.ForeignKey("carpools.id"))
    requester_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    pick_up_lng = db.Column(db.String())
    pick_up_lat = db.Column(db.String())
    drop_off_lng = db.Column(db.String())
    drop_off_lat = db.Column(db.String())

    __tablename__ = "carpool_requests"

    #TODO: logic for accepting/declining
コード例 #6
0
class User(db.Model):
    """Basic user model
    """
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    first_name = db.Column(db.String(80), nullable=False)
    second_name = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(255), nullable=False)
    active = db.Column(db.Boolean, default=True)

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        self.password = pwd_context.hash(self.password)

    def __repr__(self):
        return "<User %s>" % self.username
コード例 #7
0
class TokenBlacklist(db.Model):
    """Blacklist representation
    """
    id = db.Column(db.Integer, primary_key=True)
    jti = db.Column(db.String(36), nullable=False, unique=True)
    token_type = db.Column(db.String(10), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    revoked = db.Column(db.Boolean, nullable=False)
    expires = db.Column(db.DateTime, nullable=False)

    user = db.relationship('User', lazy='joined')

    def to_dict(self):
        return {
            'token_id': self.id,
            'jti': self.jti,
            'token_type': self.token_type,
            'user_identity': self.user_identity,
            'revoked': self.revoked,
            'expires': self.expires
        }
コード例 #8
0
class Rating(db.Model):
    user_id = db.Column(db.Integer, primary_key=True)
    rating_type = db.Column(db.Enum(RatingType), primary_key=True)
    rating_id = db.Column(db.Integer, primary_key=True)
    rating = db.Column(db.Integer, nullable=False)
    rating_text = db.Column(db.String)
    date_submitted = db.Column(db.DateTime,
                               nullable=False,
                               default=datetime.datetime.utcnow)

    __tablename__ = "ratings"
    __table_args__ = (db.ForeignKeyConstraint(["user_id"], ["user.id"]), )

    def __init__(self, user_id, rating_type, **kwargs):
        super(Rating, self).__init__(**kwargs)

        latest_rating = Rating.query.filter_by(user_id=user_id,
                                               rating_type=rating_type).last()

        if latest_rating is None:
            self.rating_id = 1
        else:
            self.rating_id = latest_rating.rating_id + 1
コード例 #9
0
class Routes(db.Model):
    __tablename__ = "routes"
    route_id = db.Column(db.Integer, primary_key=True)
    path_name = db.Column(db.String(80), primary_key=True)
    origin_destination = db.Column(db.Enum(DestinationType), primary_key=True)
    city = db.Column(db.String(80), nullable=False)