42 lines
1.8 KiB
Python
42 lines
1.8 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
from decimal import Decimal
|
|
|
|
class UserBase(BaseModel):
|
|
address: str = Field(..., description="Property address")
|
|
square_footage: float = Field(..., gt=0, description="Square footage of the property")
|
|
bedrooms: int = Field(..., gt=0, description="Number of bedrooms")
|
|
bathrooms: float = Field(..., gt=0, description="Number of bathrooms")
|
|
year_built: int = Field(..., gt=1800, lt=2100, description="Year the property was built")
|
|
property_type: str = Field(..., description="Type of property")
|
|
price: float = Field(..., gt=0, description="Property price")
|
|
is_available: bool = Field(default=True, description="Property availability status")
|
|
description: Optional[str] = Field(None, description="Property description")
|
|
garage_spaces: int = Field(default=0, ge=0, description="Number of garage spaces")
|
|
lot_size: Optional[float] = Field(None, gt=0, description="Size of the lot")
|
|
status: str = Field(default="available", description="Current status of the property")
|
|
|
|
class UserCreate(UserBase):
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"address": "123 Main St",
|
|
"square_footage": 2000.0,
|
|
"bedrooms": 3,
|
|
"bathrooms": 2.5,
|
|
"year_built": 2000,
|
|
"property_type": "Single Family Home",
|
|
"price": 350000.0,
|
|
"is_available": True,
|
|
"description": "Beautiful home in quiet neighborhood",
|
|
"garage_spaces": 2,
|
|
"lot_size": 5000.0,
|
|
"status": "available"
|
|
}
|
|
}
|
|
|
|
class UserResponse(UserBase):
|
|
id: int = Field(..., description="Unique identifier for the property")
|
|
|
|
class Config:
|
|
orm_mode = True |