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.DateTime, nullable=False) check_out = db.Column(db.DateTime, nullable=False) guests = db.Column(db.Integer, nullable=False) listing = db.relationship('Listing', backref='bookings')