import enum import uuid from datetime import datetime from sqlalchemy import DateTime, Enum, String, Text, func from sqlalchemy.orm import Mapped, mapped_column from .db import Base class TaskStatus(str, enum.Enum): pending = "pending" in_progress = "in_progress" completed = "completed" class Task(Base): __tablename__ = "tasks" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) title: Mapped[str] = mapped_column(String(200), nullable=False, index=True) description: Mapped[str | None] = mapped_column(Text, nullable=True) status: Mapped[TaskStatus] = mapped_column(Enum(TaskStatus, name="task_status"), nullable=False, default=TaskStatus.pending) due_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)