# app/schemas/group.py from pydantic import BaseModel, ConfigDict, computed_field from datetime import datetime from typing import Optional, List from .user import UserPublic # Import UserPublic to represent members # Properties to receive via API on creation class GroupCreate(BaseModel): name: str # Properties to return to client class GroupPublic(BaseModel): id: int name: str created_by_id: int created_at: datetime member_associations: Optional[List["UserGroupPublic"]] = None @computed_field @property def members(self) -> Optional[List[UserPublic]]: if not self.member_associations: return None return [assoc.user for assoc in self.member_associations if assoc.user] model_config = ConfigDict(from_attributes=True) # Properties for UserGroup association class UserGroupPublic(BaseModel): id: int user_id: int group_id: int role: str joined_at: datetime user: Optional[UserPublic] = None model_config = ConfigDict(from_attributes=True) # Properties stored in DB (if needed, often GroupPublic is sufficient) # class GroupInDB(GroupPublic): # pass