class User(ResourceMixin, db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80)) email = db.Column(db.String(80)) password = db.Column(db.String(180)) lots = db.relationship(Lot, backref='lots', passive_deletes=True) def __init__(self, username, email, password): self.username = username self.password = User.encrypt_password(password) self.email = email @classmethod def find_by_username(cls, username): return cls.query.filter_by(username=username).first() @classmethod def find_by_id(cls, _id): return cls.query.filter_by(id=_id).first() # @classmethod # def find_by_identity(cls, email): # return cls.query.filter_by(email=email).first() @classmethod def all(cls): return cls.query.all() @staticmethod def encrypt_password(password): return generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password, password)
class RevokedTokenModel(db.Model, ResourceMixin): __tablename__ = 'revoked_tokens' id = db.Column(db.Integer, primary_key=True) jti = db.Column(db.String(120)) @classmethod def is_jti_blacklisted(cls, jti): query = cls.query.filter_by(jti=jti).first() return bool(query)
class Photo(db.Model, LightResourceMixin): __tablename__ = 'photos' id = db.Column(db.Integer, primary_key=True) lot_id = db.Column(db.Integer, db.ForeignKey('lots.id')) photo_path = db.Column(db.String) def __init__(self, lot_id, photo_path): self.lot_id = lot_id self.photo_path = photo_path @classmethod def find_by_id(cls, _id): return cls.query.filter_by(id=_id).first() @classmethod def find_by_lot_id(cls, lot_id): return cls.query.filter_by(lot_id=lot_id).all() @staticmethod def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
class Lot(ResourceMixin, db.Model): __tablename__ = 'lots' id = db.Column(db.Integer, primary_key=True) agent_id = db.Column(db.Integer, db.ForeignKey('users.id', onupdate='CASCADE', ondelete='CASCADE'), index=True, nullable=False) agent = db.relationship('User') type = db.Column(db.String) description = db.Column(db.String(80)) square = db.Column(db.Integer) qty_rooms = db.Column(db.Integer) parking = db.Column(db.Boolean) garageSpaces = db.Column(db.Integer) year_built = db.Column(db.Integer) price = db.Column(db.Integer) # owner_id = db.Column(db.Integer, db.ForeignKey('owner.id', ), # nullable=False) photos = db.relationship('Photo', cascade="all,delete", backref='lot', lazy='dynamic') address = db.relationship("Address", backref="lot") geo = db.relationship("Geo", backref="lot") # from mls.blueprints.auth.models import User status = db.Column(db.String) @classmethod def find_by_id(cls, _id): return cls.query.filter_by(id=_id).first() @classmethod def all(cls): return cls.query.all() @classmethod def editable(cls, id): current_user = get_jwt_identity() lot_owner = Lot.find_by_id(id).agent return current_user == lot_owner.username