from datetime import datetime from typing import Optional from enum import Enum as PyEnum from sqlalchemy import Boolean, Column, DateTime, Enum, Integer, String, Text, ForeignKey from sqlalchemy.orm import relationship from app.db.base_class import Base class TaskPriority(str, PyEnum): LOW = "low" MEDIUM = "medium" HIGH = "high" class TaskStatus(str, PyEnum): TODO = "todo" IN_PROGRESS = "in_progress" DONE = "done" class Task(Base): id = Column(Integer, primary_key=True, index=True) title = Column(String(255), nullable=False, index=True) description = Column(Text, nullable=True) status = Column(Enum(TaskStatus), default=TaskStatus.TODO, nullable=False) priority = Column(Enum(TaskPriority), default=TaskPriority.MEDIUM, nullable=False) due_date = Column(DateTime, nullable=True) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) completed_at = Column(DateTime, nullable=True) is_deleted = Column(Boolean, default=False, nullable=False)