import uuid from app.extensions import db class Property(db.Model): __tablename__ = "properties" id = db.Column(db.UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) title = db.Column(db.String(200), nullable=False) slug = db.Column(db.String(220), unique=True, nullable=False, index=True) address = db.Column(db.String(300), nullable=True) price = db.Column(db.Numeric(12, 2), nullable=False) condo_fee = db.Column(db.Numeric(10, 2), nullable=True) type = db.Column( db.Enum("venda", "aluguel", name="property_type"), nullable=False, ) subtype_id = db.Column( db.Integer, db.ForeignKey("property_types.id", ondelete="SET NULL"), nullable=True, index=True, ) bedrooms = db.Column(db.Integer, nullable=False, default=0) bathrooms = db.Column(db.Integer, nullable=False, default=0) parking_spots = db.Column(db.Integer, nullable=False, default=0) parking_spots_covered = db.Column(db.Integer, nullable=False, default=0) area_m2 = db.Column(db.Integer, nullable=False) city_id = db.Column( db.Integer, db.ForeignKey("cities.id", ondelete="SET NULL"), nullable=True, index=True, ) neighborhood_id = db.Column( db.Integer, db.ForeignKey("neighborhoods.id", ondelete="SET NULL"), nullable=True, index=True, ) is_featured = db.Column(db.Boolean, nullable=False, default=False) is_active = db.Column(db.Boolean, nullable=False, default=True) code = db.Column(db.String(30), unique=True, nullable=True) description = db.Column(db.Text, nullable=True) iptu_anual = db.Column(db.Numeric(12, 2), nullable=True) imobiliaria_id = db.Column( db.Integer, db.ForeignKey("imobiliarias.id", ondelete="SET NULL"), nullable=True, index=True, ) created_at = db.Column(db.DateTime, nullable=False, server_default=db.func.now()) photos = db.relationship( "PropertyPhoto", backref="property", order_by="PropertyPhoto.display_order", cascade="all, delete-orphan", lazy="select", ) subtype = db.relationship("PropertyType", foreign_keys=[subtype_id], lazy="joined") city = db.relationship("City", foreign_keys=[city_id], lazy="joined") neighborhood = db.relationship( "Neighborhood", foreign_keys=[neighborhood_id], lazy="joined" ) amenities = db.relationship( "Amenity", secondary="property_amenity", lazy="select", ) def __repr__(self) -> str: return f"" class PropertyPhoto(db.Model): __tablename__ = "property_photos" id = db.Column(db.Integer, primary_key=True, autoincrement=True) property_id = db.Column( db.UUID(as_uuid=True), db.ForeignKey("properties.id", ondelete="CASCADE"), nullable=False, ) url = db.Column(db.String(500), nullable=False) alt_text = db.Column(db.String(200), nullable=False, default="") display_order = db.Column(db.Integer, nullable=False, default=0) def __repr__(self) -> str: return f""