"""Project member schemas for cross-department collaboration.""" from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime from enum import Enum class ProjectMemberRole(str, Enum): """Roles that can be assigned to project members.""" MEMBER = "member" ADMIN = "admin" class ProjectMemberBase(BaseModel): """Base schema for project member.""" user_id: str = Field(..., description="ID of the user to add as project member") role: ProjectMemberRole = Field( default=ProjectMemberRole.MEMBER, description="Role of the member: 'member' (view/edit tasks) or 'admin' (manage project)" ) class ProjectMemberCreate(ProjectMemberBase): """Schema for creating a project member.""" pass class ProjectMemberUpdate(BaseModel): """Schema for updating a project member.""" role: ProjectMemberRole = Field(..., description="New role for the member") class ProjectMemberResponse(ProjectMemberBase): """Schema for project member response.""" id: str project_id: str added_by: str created_at: datetime class Config: from_attributes = True class ProjectMemberWithDetails(ProjectMemberResponse): """Schema for project member with user details.""" user_name: Optional[str] = None user_email: Optional[str] = None user_department_id: Optional[str] = None user_department_name: Optional[str] = None added_by_name: Optional[str] = None class ProjectMemberListResponse(BaseModel): """Schema for listing project members.""" members: List[ProjectMemberWithDetails] total: int