""" Pydantic schemas for DecisionLog model. Request and response schemas for tracking important decisions made during work. """ from datetime import datetime from typing import Optional from uuid import UUID from pydantic import BaseModel, Field class DecisionLogBase(BaseModel): """Base schema with shared DecisionLog fields.""" project_id: Optional[UUID] = Field(None, description="Project ID (optional)") session_id: Optional[UUID] = Field(None, description="Session ID (optional)") decision_type: str = Field(..., description="Type of decision: technical, architectural, process, security") decision_text: str = Field(..., description="What was decided (the actual decision)") rationale: Optional[str] = Field(None, description="Why this decision was made") alternatives_considered: Optional[str] = Field(None, description="JSON array of other options that were considered") impact: str = Field("medium", description="Impact level: low, medium, high, critical") tags: Optional[str] = Field(None, description="JSON array of tags for retrieval and categorization") class DecisionLogCreate(DecisionLogBase): """Schema for creating a new DecisionLog.""" pass class DecisionLogUpdate(BaseModel): """Schema for updating an existing DecisionLog. All fields are optional.""" project_id: Optional[UUID] = Field(None, description="Project ID (optional)") session_id: Optional[UUID] = Field(None, description="Session ID (optional)") decision_type: Optional[str] = Field(None, description="Type of decision: technical, architectural, process, security") decision_text: Optional[str] = Field(None, description="What was decided (the actual decision)") rationale: Optional[str] = Field(None, description="Why this decision was made") alternatives_considered: Optional[str] = Field(None, description="JSON array of other options that were considered") impact: Optional[str] = Field(None, description="Impact level: low, medium, high, critical") tags: Optional[str] = Field(None, description="JSON array of tags for retrieval and categorization") class DecisionLogResponse(DecisionLogBase): """Schema for DecisionLog responses with ID and timestamps.""" id: UUID = Field(..., description="Unique identifier for the decision log") created_at: datetime = Field(..., description="Timestamp when the decision was logged") updated_at: datetime = Field(..., description="Timestamp when the decision log was last updated") model_config = {"from_attributes": True}