import uuid from app.extensions import db # Association table N:N between Property and Amenity — no model class needed property_amenity = db.Table( "property_amenity", db.Column( "property_id", db.UUID(as_uuid=True), db.ForeignKey("properties.id", ondelete="CASCADE"), primary_key=True, ), db.Column( "amenity_id", db.Integer, db.ForeignKey("amenities.id", ondelete="CASCADE"), primary_key=True, ), ) class PropertyType(db.Model): """Hierarchical property type: Residencial > Apartamento""" __tablename__ = "property_types" id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(100), nullable=False) slug = db.Column(db.String(120), unique=True, nullable=False, index=True) parent_id = db.Column( db.Integer, db.ForeignKey("property_types.id", ondelete="SET NULL"), nullable=True, index=True, ) # Self-referential relationship subtypes = db.relationship( "PropertyType", backref=db.backref("parent", remote_side=[id]), lazy="select", ) def __repr__(self) -> str: return f"" class Amenity(db.Model): """Tagged feature/amenity for a property (characteristic, leisure, condo, security)""" __tablename__ = "amenities" GROUPS = ("caracteristica", "lazer", "condominio", "seguranca") id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(100), nullable=False) slug = db.Column(db.String(120), unique=True, nullable=False, index=True) group = db.Column( db.Enum( "caracteristica", "lazer", "condominio", "seguranca", name="amenity_group" ), nullable=False, ) def __repr__(self) -> str: return f""