"""Task ORM model and schemas.""" from __future__ import annotations from datetime import datetime from pydantic import BaseModel, ConfigDict from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, Text, func from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import Base class Task(Base): """Represents a task linked to a deal.""" __tablename__ = "tasks" id: Mapped[int] = mapped_column(Integer, primary_key=True) deal_id: Mapped[int] = mapped_column(ForeignKey("deals.id", ondelete="CASCADE")) title: Mapped[str] = mapped_column(Text, nullable=False) description: Mapped[str | None] = mapped_column(Text, nullable=True) due_date: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) is_done: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False ) deal = relationship("Deal", back_populates="tasks") class TaskBase(BaseModel): deal_id: int title: str description: str | None = None due_date: datetime | None = None is_done: bool = False class TaskCreate(TaskBase): pass class TaskRead(TaskBase): id: int created_at: datetime model_config = ConfigDict(from_attributes=True)