test_task_crm/app/models/task.py

48 lines
1.3 KiB
Python

"""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)