"""Review schemas.""" from pydantic import BaseModel, Field from typing import Optional from datetime import datetime class ReviewCreate(BaseModel): task_id: int project_id: int review_type: str = "approval" review_content: str = "" auto_check_result: str = "{}" class ReviewDecision(BaseModel): """Reviewer's approve/reject decision.""" comment: str = "" status: str = Field(..., pattern="^(approved|rejected)$") class ReviewResponse(BaseModel): id: int task_id: int project_id: int review_type: str status: str reviewer_id: Optional[int] = None reviewer_role: Optional[str] = None review_content: str = "" reviewer_comment: str = "" auto_check_result: str = "{}" submitted_at: datetime reviewed_at: Optional[datetime] = None tenant_id: int created_at: datetime model_config = {"from_attributes": True} class ReviewDetailResponse(BaseModel): """Review with full context: task, project, worker, cost info joined.""" # --- Review fields --- id: int task_id: int project_id: int review_type: str status: str reviewer_id: Optional[int] = None reviewer_role: Optional[str] = None review_content: str = "" reviewer_comment: str = "" auto_check_result: str = "{}" submitted_at: datetime reviewed_at: Optional[datetime] = None created_at: datetime # --- Task context --- task_title: str = "" task_description: str = "" task_input_data: str = "" task_output_data: str = "" task_priority: str = "medium" task_type: str = "single_call" task_status: str = "" # --- Project context --- project_name: str = "" project_description: str = "" # --- Worker context --- worker_id: Optional[int] = None worker_name: Optional[str] = None worker_model_name: Optional[str] = None worker_provider: Optional[str] = None worker_system_prompt: Optional[str] = None # --- Cost / usage --- cost_cents: int = 0 token_usage: int = 0 duration_ms: int = 0