from enum import Enum as PyEnum from sqlalchemy import Boolean, Column, DateTime, Enum, ForeignKey, Integer, String, Text from sqlalchemy.orm import relationship from app.db.base import Base from app.models.tag import todo_tag class PriorityLevel(str, PyEnum): LOW = "low" MEDIUM = "medium" HIGH = "high" class Todo(Base): __tablename__ = "todos" id = Column(Integer, primary_key=True, index=True) title = Column(String, index=True) description = Column(Text, nullable=True) is_completed = Column(Boolean, default=False) priority = Column(Enum(PriorityLevel), default=PriorityLevel.MEDIUM) due_date = Column(DateTime, nullable=True) owner_id = Column(Integer, ForeignKey("users.id")) category_id = Column(Integer, ForeignKey("categories.id"), nullable=True) owner = relationship("User", back_populates="todos") category = relationship("Category", back_populates="todos") tags = relationship("Tag", secondary=todo_tag, back_populates="todos")