from pydantic import BaseModel from typing import Optional from datetime import datetime, date from decimal import Decimal from enum import Enum class SecurityLevel(str, Enum): PUBLIC = "public" DEPARTMENT = "department" CONFIDENTIAL = "confidential" class ProjectBase(BaseModel): title: str description: Optional[str] = None budget: Optional[Decimal] = None start_date: Optional[date] = None end_date: Optional[date] = None security_level: SecurityLevel = SecurityLevel.DEPARTMENT class ProjectCreate(ProjectBase): department_id: Optional[str] = None class ProjectUpdate(BaseModel): title: Optional[str] = None description: Optional[str] = None budget: Optional[Decimal] = None start_date: Optional[date] = None end_date: Optional[date] = None security_level: Optional[SecurityLevel] = None status: Optional[str] = None department_id: Optional[str] = None class ProjectResponse(ProjectBase): id: str space_id: str owner_id: str status: str department_id: Optional[str] = None created_at: datetime updated_at: datetime class Config: from_attributes = True class ProjectWithDetails(ProjectResponse): owner_name: Optional[str] = None space_name: Optional[str] = None department_name: Optional[str] = None task_count: int = 0