from sqlalchemy import Boolean, Column, Date, Float, ForeignKey, Integer, String, Text from sqlalchemy.orm import relationship from app.models.base import Base class Category(Base): """Rental item categories.""" id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True, nullable=False) description = Column(Text, nullable=True) # Relationship items = relationship("RentalItem", back_populates="category") def __repr__(self): return f"" class RentalItem(Base): """Rental items available for rent.""" id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True, nullable=False) description = Column(Text, nullable=True) daily_rate = Column(Float, nullable=False) is_available = Column(Boolean, default=True, nullable=False) category_id = Column(Integer, ForeignKey("category.id"), nullable=False) # Relationships category = relationship("Category", back_populates="items") rental_records = relationship("RentalRecord", back_populates="item") def __repr__(self): return f"" class Customer(Base): """Customer information.""" id = Column(Integer, primary_key=True, index=True) first_name = Column(String, nullable=False) last_name = Column(String, nullable=False) email = Column(String, unique=True, index=True, nullable=False) phone = Column(String, nullable=True) address = Column(Text, nullable=True) # Relationship rental_records = relationship("RentalRecord", back_populates="customer") def __repr__(self): return f"" class RentalRecord(Base): """Records of rental transactions.""" id = Column(Integer, primary_key=True, index=True) item_id = Column(Integer, ForeignKey("rentalitem.id"), nullable=False) customer_id = Column(Integer, ForeignKey("customer.id"), nullable=False) rental_date = Column(Date, nullable=False) return_date = Column(Date, nullable=False) actual_return_date = Column(Date, nullable=True) total_cost = Column(Float, nullable=False) notes = Column(Text, nullable=True) # Relationships item = relationship("RentalItem", back_populates="rental_records") customer = relationship("Customer", back_populates="rental_records") def __repr__(self): return f""