# ============================================================ # app/schemas/user.py - User DTOs # ============================================================ from pydantic import BaseModel, Field from datetime import datetime from typing import Optional class UserProfileDto(BaseModel): """User profile response DTO""" id: str first_name: str last_name: str email: Optional[str] = None phone: Optional[str] = None role: str subscription_type: str subscription_expires_at: Optional[datetime] = None is_email_verified: bool is_phone_verified: bool is_active: bool total_listings: int profile_picture: Optional[str] = None bio: Optional[str] = None last_login: Optional[datetime] = None created_at: datetime updated_at: datetime class Config: from_attributes = True class UserUpdateDto(BaseModel): """Update user profile DTO""" first_name: Optional[str] = Field(None, min_length=1, max_length=50) last_name: Optional[str] = Field(None, min_length=1, max_length=50) phone: Optional[str] = None bio: Optional[str] = Field(None, max_length=500) # ============================================================ # Generic Response DTOs # ============================================================ class SuccessResponse(BaseModel): """Generic success response""" success: bool = True message: str data: Optional[dict] = None class ErrorResponse(BaseModel): """Generic error response""" success: bool = False message: str errors: Optional[dict] = None class LoginResponse(BaseModel): """Login response with token and user""" success: bool = True message: str data: dict # {user: UserProfileDto, token: str} class TokenResponse(BaseModel): """Token response""" success: bool = True message: str data: dict # {token: str, resetToken: str}