from typing import Annotated from pydantic import BaseModel, ConfigDict, Field, model_validator from datetime import datetime class TaskAssignmentCreate(BaseModel): model_config = ConfigDict(extra="forbid") user_ids: list[Annotated[int, Field(ge=1, le=2147483647)]] = Field(min_length=1, max_length=20) class TaskAssignmentResponse(BaseModel): id: int task_id: int user_id: int assigned_by: int user_name: str | None = None created_at: datetime model_config = ConfigDict(from_attributes=True) @model_validator(mode="before") @classmethod def resolve_user_name(cls, data): # type: ignore[override] """Populate user_name from eagerly loaded user relationship.""" if hasattr(data, "user") and data.user is not None and not getattr(data, "user_name", None): # Build dict from ORM columns so new fields are auto-included cols = {c.key: getattr(data, c.key) for c in data.__table__.columns} cols["user_name"] = data.user.username return cols return data