from pydantic import BaseModel, ConfigDict, Field, model_validator from datetime import datetime class TaskAssignmentCreate(BaseModel): model_config = ConfigDict(extra="forbid") user_ids: list[int] = 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: if not getattr(data, "user_name", None): data = dict( id=data.id, task_id=data.task_id, user_id=data.user_id, assigned_by=data.assigned_by, user_name=data.user.username, created_at=data.created_at, ) return data