From 6f7d5fe046760d3015f461a50d1d09baf3d2cfdc Mon Sep 17 00:00:00 2001 From: jessikitty Date: Thu, 5 Feb 2026 12:12:11 +1100 Subject: [PATCH] Phase 3.1: Add ChoreCompletionLog model --- backend/app/models/chore_completion_log.py | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 backend/app/models/chore_completion_log.py diff --git a/backend/app/models/chore_completion_log.py b/backend/app/models/chore_completion_log.py new file mode 100644 index 0000000..fc0df39 --- /dev/null +++ b/backend/app/models/chore_completion_log.py @@ -0,0 +1,31 @@ +"""Chore Completion Log model for tracking historical chore completions.""" +from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text +from sqlalchemy.orm import relationship +from datetime import datetime +from app.core.database import Base + + +class ChoreCompletionLog(Base): + """ + Comprehensive log of chore completions. + + This model tracks every completion instance, allowing for: + - Historical completion data + - Multiple completions of the same chore + - Optional notes and verification + - Weekly/monthly reporting + """ + __tablename__ = "chore_completion_logs" + + id = Column(Integer, primary_key=True, index=True) + chore_id = Column(Integer, ForeignKey("chores.id", ondelete="CASCADE"), nullable=False, index=True) + user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True) + completed_at = Column(DateTime, default=datetime.utcnow, nullable=False, index=True) + notes = Column(Text, nullable=True) # Optional notes about the completion + verified_by_user_id = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"), nullable=True) # Optional verification + created_at = Column(DateTime, default=datetime.utcnow, nullable=False) + + # Relationships + chore = relationship("Chore", foreign_keys=[chore_id]) + user = relationship("User", foreign_keys=[user_id], back_populates="chore_completion_logs") + verified_by = relationship("User", foreign_keys=[verified_by_user_id])