feat: features 025-032 - favoritos, contatos, trabalhe-conosco, area-cliente, navbar, hero-light-dark, performance-homepage
Some checks failed
CI/CD → Deploy via SSH / Build & Push Docker Images (push) Successful in 1m0s
CI/CD → Deploy via SSH / Deploy via SSH (push) Successful in 4m35s
CI/CD → Deploy via SSH / Validate HTTPS & Endpoints (push) Failing after 46s

- feat(025): favoritos locais com FavoritesContext, HeartButton, PublicFavoritesPage
- feat(026): central de contatos admin (leads/contatos unificados)
- feat(027): configuração da página de contato via admin
- feat(028): trabalhe conosco - candidaturas com upload e admin
- feat(029): UX área do cliente - visitas, comparação, perfil
- feat(030): navbar UX - menu mobile, ThemeToggle, useFavorites
- feat(031): hero light/dark - imagens separadas por tema, upload, preview, seed
- feat(032): performance homepage - Promise.all parallel fetches, sessionStorage cache,
  preload hero image, loading=lazy nos cards, useInView hook, will-change carrossel,
  keyframes em index.css, AgentsCarousel e HomeScrollScene via props
- fix: light mode HomeScrollScene - gradiente, cores de texto, scroll hint

migrations: g1h2i3j4k5l6 (source em leads), h1i2j3k4l5m6 (contact_config),
            i1j2k3l4m5n6 (job_applications), j2k3l4m5n6o7 (hero theme images)
This commit is contained in:
MatheusAlves96 2026-04-22 22:35:17 -03:00
parent 6ef5a7a17e
commit cf5603243c
106 changed files with 11927 additions and 1367 deletions

View file

@ -1,7 +1,10 @@
from flask import Blueprint, jsonify
from flask import Blueprint, jsonify, request
from pydantic import ValidationError
from app.extensions import db
from app.models.homepage import HomepageConfig
from app.schemas.homepage import HomepageConfigOut
from app.schemas.homepage import HomepageConfigOut, HomepageHeroImagesIn
from app.utils.auth import require_admin
homepage_bp = Blueprint("homepage", __name__, url_prefix="/api/v1")
@ -11,4 +14,33 @@ def get_homepage_config():
config = HomepageConfig.query.first()
if config is None:
return jsonify({"error": "Homepage config not found"}), 404
return jsonify(HomepageConfigOut.model_validate(config).model_dump())
return jsonify(HomepageConfigOut.model_validate(config).model_dump(mode="json"))
@homepage_bp.put("/admin/homepage-config")
@require_admin
def update_homepage_hero_images():
try:
data = HomepageHeroImagesIn.model_validate(request.get_json() or {})
except ValidationError as e:
return jsonify({"error": e.errors(include_url=False)}), 422
config = HomepageConfig.query.first()
if config is None:
config = HomepageConfig(
hero_headline="Encontre o imóvel dos seus sonhos",
hero_subheadline="Os melhores imóveis para comprar ou alugar na sua região",
hero_cta_label="Ver Imóveis",
hero_cta_url="/imoveis",
featured_properties_limit=6,
)
db.session.add(config)
config.hero_image_url = data.hero_image_url
config.hero_image_light_url = data.hero_image_light_url
config.hero_image_dark_url = data.hero_image_dark_url
db.session.commit()
db.session.refresh(config)
return jsonify(HomepageConfigOut.model_validate(config).model_dump(mode="json")), 200