"""Pydantic schemas for position-related API operations.""" from pydantic import BaseModel, Field from datetime import date, datetime from typing import Optional from decimal import Decimal from app.models.position import PositionType, PositionStatus class PositionBase(BaseModel): """Base schema for position data.""" symbol: str option_symbol: Optional[str] = None position_type: PositionType status: PositionStatus open_date: date close_date: Optional[date] = None total_quantity: Decimal avg_entry_price: Optional[Decimal] = None avg_exit_price: Optional[Decimal] = None realized_pnl: Optional[Decimal] = None unrealized_pnl: Optional[Decimal] = None class PositionResponse(PositionBase): """Schema for position API responses.""" id: int account_id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class PositionStats(BaseModel): """Schema for aggregate position statistics.""" total_positions: int = Field(..., description="Total number of positions") open_positions: int = Field(..., description="Number of open positions") closed_positions: int = Field(..., description="Number of closed positions") total_realized_pnl: Decimal = Field(..., description="Total realized P&L") total_unrealized_pnl: Decimal = Field(..., description="Total unrealized P&L") win_rate: float = Field(..., description="Percentage of profitable trades") avg_win: Decimal = Field(..., description="Average profit on winning trades") avg_loss: Decimal = Field(..., description="Average loss on losing trades")