Files
booking/models.py
T
2025-03-01 17:13:57 +08:00

65 lines
2.8 KiB
Python

from app import db
from flask_login import UserMixin
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(150), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
phone = db.Column(db.String(20), nullable=False)
is_host = db.Column(db.Boolean, default=False)
documents = db.relationship('Document', backref='user', lazy=True)
class Document(db.Model):
id = db.Column(db.Integer, primary_key=True)
filename = db.Column(db.String(200), nullable=False)
verified = db.Column(db.Boolean, default=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
class Listing(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(150), nullable=False)
description = db.Column(db.Text, nullable=False)
price = db.Column(db.Float, nullable=False)
location = db.Column(db.String(150), nullable=False)
property_type = db.Column(db.String(50), nullable=False)
host_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
images = db.relationship('Image', backref='listing', lazy=True)
latitude = db.Column(db.Float, nullable=True)
longitude = db.Column(db.Float, nullable=True)
guests = db.Column(db.Integer, nullable=False, default=1)
rooms = db.Column(db.Integer, nullable=False, default=1)
bathrooms = db.Column(db.Integer, nullable=False, default=1)
beds = db.Column(db.Integer, nullable=False, default=1)
amenities = db.relationship('Amenities', secondary='listing_amenities', backref='listings', lazy='dynamic')
PROPERTY_TYPES = {
'house': 'Дом',
'villa': 'Вилла',
'flat': 'Квартира',
'room': 'Комната',
'hotel': 'Гостиница'
}
class Amenities(db.Model):
id = db.Column(db.Integer, primary_key=True)
amenity = db.Column(db.String(100), nullable=False, unique=True)
listing_amenities = db.Table('listing_amenities',
db.Column('listing_id', db.Integer, db.ForeignKey('listing.id'), primary_key=True),
db.Column('amenity_id', db.Integer, db.ForeignKey('amenities.id'), primary_key=True)
)
class Image(db.Model):
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(300), nullable=False)
listing_id = db.Column(db.Integer, db.ForeignKey('listing.id'), nullable=False)
class Booking(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
listing_id = db.Column(db.Integer, db.ForeignKey('listing.id'), nullable=False)
check_in = db.Column(db.Date, nullable=False)
check_out = db.Column(db.Date, nullable=False)
guests = db.Column(db.Integer, nullable=False)
listing = db.relationship('Listing', backref='bookings')