Spaces:
Running
Running
File size: 2,139 Bytes
79ef7e1 32ae427 79ef7e1 32ae427 79ef7e1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# ============================================================
# 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
location: Optional[str] = None
languages: list[str] = []
is_verified: bool = False
reviews_count: int = 0
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)
location: Optional[str] = Field(None, max_length=200)
languages: Optional[list[str]] = None
# ============================================================
# 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} |