diff --git a/backend/app/models/chore.py b/backend/app/models/chore.py new file mode 100644 index 0000000..05cafc4 --- /dev/null +++ b/backend/app/models/chore.py @@ -0,0 +1,40 @@ +"""Chore model.""" +from sqlalchemy import Boolean, Column, Integer, String, DateTime, ForeignKey, Enum as SQLEnum +from sqlalchemy.orm import relationship +from datetime import datetime +from app.core.database import Base +import enum + +class ChoreFrequency(str, enum.Enum): + """Chore frequency options.""" + DAILY = "daily" + WEEKLY = "weekly" + FORTNIGHTLY = "fortnightly" + MONTHLY = "monthly" + ADHOC = "adhoc" + +class ChoreStatus(str, enum.Enum): + """Chore status options.""" + PENDING = "pending" + IN_PROGRESS = "in_progress" + COMPLETED = "completed" + SKIPPED = "skipped" + +class Chore(Base): + """Chore model.""" + __tablename__ = "chores" + + id = Column(Integer, primary_key=True, index=True) + title = Column(String(200), nullable=False) + description = Column(String(500)) + room = Column(String(50)) # bedroom1, bedroom2, kitchen, bathroom1, etc. + frequency = Column(SQLEnum(ChoreFrequency), nullable=False) + status = Column(SQLEnum(ChoreStatus), default=ChoreStatus.PENDING) + assigned_user_id = Column(Integer, ForeignKey("users.id")) + due_date = Column(DateTime) + completed_at = Column(DateTime) + created_at = Column(DateTime, default=datetime.utcnow) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + assigned_user = relationship("User", back_populates="chores")