from sqlalchemy import Column, Integer, String, Boolean, Text, DateTime, ForeignKey, Numeric, JSON, Enum from sqlalchemy.sql import func from sqlalchemy.orm import relationship import enum from app.db.base import Base class PropertyType(str, enum.Enum): APARTMENT = "apartment" HOUSE = "house" DUPLEX = "duplex" BUNGALOW = "bungalow" FLAT = "flat" ROOM = "room" SELF_CONTAIN = "self_contain" SHOP = "shop" OFFICE = "office" WAREHOUSE = "warehouse" class PropertyStatus(str, enum.Enum): FOR_RENT = "for_rent" FOR_SALE = "for_sale" SHORTLET = "shortlet" class PropertyListing(Base): __tablename__ = "property_listings" id = Column(Integer, primary_key=True, index=True) owner_id = Column(Integer, ForeignKey("users.id"), nullable=False) title = Column(String(200), nullable=False, index=True) description = Column(Text, nullable=False) price = Column(Numeric(15, 2), nullable=False, index=True) location = Column(String(255), nullable=False, index=True) state = Column(String(50), nullable=False, index=True) lga = Column(String(100), nullable=False, index=True) property_type = Column(Enum(PropertyType), nullable=False, index=True) status = Column(Enum(PropertyStatus), default=PropertyStatus.FOR_RENT, nullable=False, index=True) bedrooms = Column(Integer, default=0) bathrooms = Column(Integer, default=0) toilets = Column(Integer, default=0) amenities = Column(JSON) images = Column(JSON) is_affordable = Column(Boolean, default=False, index=True) is_approved = Column(Boolean, default=False, index=True) is_active = Column(Boolean, default=True, index=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) owner = relationship("User", back_populates="property_listings")