Files
ai-worker-platform/backend/app/schemas/review.py
T

81 lines
2.0 KiB
Python

"""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