69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
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"<Category {self.name}>"
|
|
|
|
|
|
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"<RentalItem {self.name}>"
|
|
|
|
|
|
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"<Customer {self.first_name} {self.last_name}>"
|
|
|
|
|
|
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"<RentalRecord {self.id}>" |