from datetime import datetime from sqlalchemy import Boolean, Column, DateTime, Integer, String, Text from sqlalchemy.sql import func from app.db.base_class import Base class Task(Base): """Task model representing a to-do item""" id = Column(Integer, primary_key=True, index=True) title = Column(String(255), nullable=False, index=True) description = Column(Text, nullable=True) is_completed = Column(Boolean, default=False) # Priority: 1 (Low), 2 (Medium), 3 (High) priority = Column(Integer, default=2) # Audit timestamp fields created_at = Column(DateTime, default=func.now(), nullable=False) updated_at = Column(DateTime, default=func.now(), onupdate=func.now(), nullable=False) completed_at = Column(DateTime, nullable=True) # Optional due date due_date = Column(DateTime, nullable=True) def mark_as_completed(self) -> None: """Mark the task as completed and set the completion timestamp""" self.is_completed = True self.completed_at = datetime.utcnow()