class User(db.Model): __tablename__ = 'user' __mapper_args = {'polymorphic_identity': 'user', 'polymorphic_on': type} id: int = db.Column(db.Integer, primary_key=True, nullable=False) pesel = db.Column(db.String(11), unique=True, nullable=False) name: str = db.Column(db.String(50), nullable=False) surname = db.Column(db.String(50), nullable=False) email: str = db.Column(db.String(50), unique=True, nullable=False) password = db.Column(db.String(100), nullable=False) @validates('email') def validate_email(self, key, email): assert '@' in email, "Not valid email: email should contain '@'" return email @validates('password') def validate_password(self, key, password): assert password is not None, "Password can not be empty" return password @validates('pesel') def validate_pesel(self, key, pesel): assert len(pesel) == 11, "Bad pesel's length" return pesel @validates('name') def validate_name(self, key, name): assert name is not None, "Name can not be empty" return name @validates('surname') def validate_surname(self, key, surname): assert surname is not None, "Surname can not be empty" return surname
class Group(db.Model): __tablename__ = 'group' __table_args__ = {'extend_existing': True} users: list = db.relationship('Tenant', secondary=User_Group, backref='Group') id: int = db.Column(db.Integer, primary_key=True) name: str = db.Column(db.String(100), nullable=False) preferred_locations: str = db.Column(db.String(100)) preferred_room_quantity: int = db.Column(db.Integer) preferred_size: int = db.Column(db.Integer) budget: int = db.Column(db.Integer)
class RentalObject(db.Model): __tablename__ = 'rental_object' __mapper_args = { 'polymorphic_identity': 'rental_object', 'polymorphic_on': type } id: int = db.Column(db.Integer, primary_key=True, nullable=False) description: str = db.Column(db.String(200)) area_description: str = db.Column(db.String(200)) equipment: str = db.Column(db.String(200)) address: str = db.Column(db.String) price: float = db.Column(db.Float) opinions: list = db.relationship('Opinion', back_populates='rental_object')
class OccasionalAgreement(RentalAgreement): __tablename__ = 'occasional_agreement' __mapper_args__ = {'polymorphic_identity': 'occasional_agreement'} id = db.Column(db.Integer, db.ForeignKey('rental_agreement.id'), primary_key=True, nullable=False) notary_confirmation = db.Column(db.String(100))
class LandLord(User): __tablename__ = 'landlord' __mapper_args__ = { 'polymorphic_identity': 'landlord', } id: int = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True, nullable=False) bank_account_number: str = db.Column(db.String(16), unique=True)
class RentalAgreement(db.Model): __tablename__ = 'rental_agreement' __mapper_args = { 'polymorphic_identity': 'rental_agreement', 'polymorphic_on': type } id = db.Column(db.Integer, primary_key=True, nullable=False) start_date = db.Column(db.DATE) end_date = db.Column(db.DATE) rules_of_use = db.Column(db.String(300)) rental_object_id = db.Column(db.Integer, db.ForeignKey('rental_object.id')) rental_object = db.relationship('RentalObject') bills: list = db.relationship('RentBill', back_populates='rental_agreement')
class Opinion(db.Model): __tablename__ = 'opinion' _available_rates = ("0", "1", "2", "3", "4", "5") comment: str = db.Column(db.String(200)) rate: float = db.Column(db.Float) author_id = db.Column(db.Integer, db.ForeignKey('tenant.id'), primary_key=True, nullable=False) author = db.relationship("Tenant", back_populates='opinions') rental_object = db.relationship("RentalObject", back_populates='opinions') rental_object_id = db.Column(db.Integer, db.ForeignKey('rental_object.id'), primary_key=True, nullable=False)