sass-imobiliaria/backend/app/schemas/property.py
MatheusAlves96 d363a09f36 feat(backend): add video_url and video_position to properties
- Model: video_url VARCHAR(512) nullable, video_position VARCHAR(20) default 'section'
- Migration: k3l4m5n6o7p8_add_video_to_properties
- Admin route: expose/accept video_url (sanitize empty->NULL) and video_position
- Public schema: PropertyDetailOut exposes both fields
2026-04-22 23:57:28 -03:00

65 lines
1.4 KiB
Python

from __future__ import annotations
from datetime import datetime
from decimal import Decimal
from uuid import UUID
from typing import Literal
from pydantic import BaseModel, ConfigDict
from app.schemas.catalog import (
AmenityOut,
ImobiliariaOut,
PropertyTypeOut,
CityOut,
NeighborhoodOut,
)
class PropertyPhotoOut(BaseModel):
model_config = ConfigDict(from_attributes=True)
url: str
alt_text: str
display_order: int
class PropertyOut(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: UUID
title: str
slug: str
code: str | None = None
price: Decimal
condo_fee: Decimal | None
iptu_anual: Decimal | None = None
type: Literal["venda", "aluguel"]
subtype: PropertyTypeOut | None
bedrooms: int
bathrooms: int
parking_spots: int
area_m2: int
city: CityOut | None
neighborhood: NeighborhoodOut | None
imobiliaria: ImobiliariaOut | None = None
is_featured: bool
created_at: datetime | None = None
photos: list[PropertyPhotoOut]
amenities: list[AmenityOut] = []
class PaginatedPropertiesOut(BaseModel):
items: list[PropertyOut]
total: int
page: int
per_page: int
pages: int
class PropertyDetailOut(PropertyOut):
address: str | None = None
code: str | None = None
description: str | None = None
video_url: str | None = None
video_position: Literal['carousel', 'section'] = 'section'