from pydantic import BaseModel, EmailStr, Field, validator from typing import Optional, List, Dict, Any from datetime import datetime # پایه class BaseSchema(BaseModel): class Config: from_attributes = True json_encoders = { datetime: lambda dt: dt.isoformat() } # کاربر class UserBase(BaseSchema): username: str = Field(..., min_length=3, max_length=50) email: EmailStr full_name: Optional[str] = Field(None, max_length=100) class UserCreate(UserBase): password: str = Field(..., min_length=8) @validator('password') def validate_password(cls, v): from app.core.security import validate_password_strength strength = validate_password_strength(v) if not all(strength.values()): raise ValueError("رمز عبور باید حداقل ۸ کاراکتر، حرف بزرگ، کوچک، عدد و کاراکتر خاص داشته باشد") return v class UserUpdate(BaseSchema): email: Optional[EmailStr] = None full_name: Optional[str] = None risk_tolerance: Optional[str] = None require_confirmation: Optional[bool] = None class UserInDB(UserBase): id: int is_active: bool is_superuser: bool is_verified: bool risk_tolerance: str require_confirmation: bool created_at: datetime class Config: from_attributes = True class UserResponse(UserInDB): pass class Token(BaseSchema): access_token: str refresh_token: str token_type: str = "bearer" session_id: str user: UserResponse class LoginRequest(BaseSchema): username: str password: str remember_me: bool = False # تسک class TaskBase(BaseSchema): title: str = Field(..., max_length=200) description: Optional[str] = None goal: str = Field(..., min_length=10) class TaskCreate(TaskBase): pass class TaskUpdate(BaseSchema): status: Optional[str] = None progress: Optional[int] = None result_data: Optional[Dict[str, Any]] = None error_message: Optional[str] = None class TaskInDB(TaskBase): id: str user_id: int status: str progress: int risk_level: Optional[str] result_data: Optional[Dict[str, Any]] error_message: Optional[str] execution_time: Optional[int] created_at: datetime started_at: Optional[datetime] completed_at: Optional[datetime] class Config: from_attributes = True # اکشن class ActionBase(BaseSchema): action_type: str description: str parameters: Dict[str, Any] class ActionCreate(ActionBase): pass class ActionInDB(ActionBase): id: int task_id: str status: str risk_assessment: Optional[Dict[str, Any]] result: Optional[Dict[str, Any]] requires_confirmation: bool confirmed: bool created_at: datetime executed_at: Optional[datetime] class Config: from_attributes = True # ریسک class RiskAssessment(BaseSchema): level: str # low, medium, high, extreme description: str legal_warnings: List[str] potential_damage: str required_confirmation: bool confirmation_code: Optional[str] # سیستم class SystemStatus(BaseSchema): users_count: int active_sessions: int pending_tasks: int running_tasks: int system_load: float memory_usage: float uptime: int class ConfigUpdate(BaseSchema): key: str value: Any