Spaces:
Running
Running
| # ============================================================ | |
| # 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} |