3 KiB
3 KiB
Quickstart: Vídeo de Apresentação do Imóvel (033)
Gerado por: /speckit.plan
Data: 2026-04-22
Setup do Ambiente
# Backend
cd backend
uv sync
alembic upgrade head # aplica k3l4m5n6o7p8_add_video_to_properties
# Frontend
cd frontend
npm install # sem novas dependências nesta feature
Rodando Localmente
# Do root do projeto
docker compose up # ou: start.ps1
Testando o Fluxo Completo
1. Configurar vídeo via admin
# Autenticar e obter token
TOKEN=$(curl -s -X POST http://localhost:5000/api/admin/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"senha"}' | jq -r .access_token)
# Atualizar imóvel com vídeo
curl -X PUT http://localhost:5000/api/admin/properties/<UUID> \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","video_position":"section"}'
2. Verificar retorno da API pública
curl http://localhost:5000/api/properties/<SLUG> | jq '.video_url, .video_position'
# Esperado: "https://www.youtube.com/watch?v=dQw4w9WgXcQ" e "section"
3. Verificar exibição na página
Abrir http://localhost:5173/imoveis/<SLUG> e confirmar:
- Seção "Vídeo de Apresentação" visível abaixo do carrossel
- Player do YouTube incorporado
- Sem erros no console
4. Testar posição carrossel
curl -X PUT http://localhost:5000/api/admin/properties/<UUID> \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"video_position":"carousel"}'
Recarregar a página: vídeo deve aparecer como primeiro slide no carrossel.
5. Remover vídeo
curl -X PUT http://localhost:5000/api/admin/properties/<UUID> \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"video_url":""}'
Confirmar que video_url retorna null na API pública e a seção de vídeo desaparece.
Rodando os Testes
cd backend
pytest tests/ -v -k "video" # testes específicos da feature (quando criados)
pytest tests/ -v # suite completa
Arquivos Criados/Modificados
| Arquivo | Ação |
|---|---|
backend/migrations/versions/k3l4m5n6o7p8_add_video_to_properties.py |
NOVO |
backend/app/models/property.py |
MODIFICADO — 2 campos novos |
backend/app/schemas/property.py |
MODIFICADO — PropertyDetailOut |
backend/app/routes/admin.py |
MODIFICADO — PropertyAdminOut, _SCALAR_FIELDS, sanitização |
frontend/src/utils/getEmbedUrl.ts |
NOVO |
frontend/src/components/PropertyDetail/VideoPlayer.tsx |
NOVO |
frontend/src/components/PropertyDetail/PhotoCarousel.tsx |
MODIFICADO — prop videoUrl |
frontend/src/pages/PropertyDetailPage.tsx |
MODIFICADO — renderização condicional |
frontend/src/pages/admin/PropertyForm.tsx |
MODIFICADO — campo URL + select posição + preview |
frontend/src/types/property.ts |
MODIFICADO — PropertyDetail |