This commit is contained in:
Iliyan Angelov
2025-12-02 08:06:00 +02:00
parent 86e78247c3
commit 4b053ce703
4 changed files with 125 additions and 6 deletions

View File

@@ -8,7 +8,93 @@ logger = get_logger(__name__)
router = APIRouter(prefix='/home', tags=['home'])
def serialize_page_content(content: PageContent) -> dict:
return {'id': content.id, 'page_type': content.page_type.value, 'title': content.title, 'subtitle': content.subtitle, 'description': content.description, 'content': content.content, 'meta_title': content.meta_title, 'meta_description': content.meta_description, 'meta_keywords': content.meta_keywords, 'og_title': content.og_title, 'og_description': content.og_description, 'og_image': content.og_image, 'canonical_url': content.canonical_url, 'hero_title': content.hero_title, 'hero_subtitle': content.hero_subtitle, 'hero_image': content.hero_image, 'amenities_section_title': content.amenities_section_title, 'amenities_section_subtitle': content.amenities_section_subtitle, 'amenities': json.loads(content.amenities) if content.amenities else None, 'testimonials_section_title': content.testimonials_section_title, 'testimonials_section_subtitle': content.testimonials_section_subtitle, 'testimonials': json.loads(content.testimonials) if content.testimonials else None, 'gallery_section_title': content.gallery_section_title, 'gallery_section_subtitle': content.gallery_section_subtitle, 'gallery_images': json.loads(content.gallery_images) if content.gallery_images else None, 'luxury_section_title': content.luxury_section_title, 'luxury_section_subtitle': content.luxury_section_subtitle, 'luxury_section_image': content.luxury_section_image, 'luxury_features': json.loads(content.luxury_features) if content.luxury_features else None, 'luxury_gallery_section_title': content.luxury_gallery_section_title, 'luxury_gallery_section_subtitle': content.luxury_gallery_section_subtitle, 'luxury_gallery': json.loads(content.luxury_gallery) if content.luxury_gallery else None, 'luxury_testimonials_section_title': content.luxury_testimonials_section_title, 'luxury_testimonials_section_subtitle': content.luxury_testimonials_section_subtitle, 'luxury_testimonials': json.loads(content.luxury_testimonials) if content.luxury_testimonials else None, 'about_preview_title': content.about_preview_title, 'about_preview_subtitle': content.about_preview_subtitle, 'about_preview_content': content.about_preview_content, 'about_preview_image': content.about_preview_image, 'stats': json.loads(content.stats) if content.stats else None, 'luxury_services_section_title': content.luxury_services_section_title, 'luxury_services_section_subtitle': content.luxury_services_section_subtitle, 'luxury_services': json.loads(content.luxury_services) if content.luxury_services else None, 'luxury_experiences_section_title': content.luxury_experiences_section_title, 'luxury_experiences_section_subtitle': content.luxury_experiences_section_subtitle, 'luxury_experiences': json.loads(content.luxury_experiences) if content.luxury_experiences else None, 'awards_section_title': content.awards_section_title, 'awards_section_subtitle': content.awards_section_subtitle, 'awards': json.loads(content.awards) if content.awards else None, 'cta_title': content.cta_title, 'cta_subtitle': content.cta_subtitle, 'cta_button_text': content.cta_button_text, 'cta_button_link': content.cta_button_link, 'cta_image': content.cta_image, 'partners_section_title': content.partners_section_title, 'partners_section_subtitle': content.partners_section_subtitle, 'partners': json.loads(content.partners) if content.partners else None, 'is_active': content.is_active, 'created_at': content.created_at.isoformat() if content.created_at else None, 'updated_at': content.updated_at.isoformat() if content.updated_at else None}
def safe_json_loads(value, default=None):
"""Safely parse JSON string, return default if invalid or empty"""
if not value:
return default
try:
parsed = json.loads(value)
return parsed if parsed else default
except (json.JSONDecodeError, TypeError):
return default
return {
'id': content.id,
'page_type': content.page_type.value,
'title': content.title,
'subtitle': content.subtitle,
'description': content.description,
'content': content.content,
'meta_title': content.meta_title,
'meta_description': content.meta_description,
'meta_keywords': content.meta_keywords,
'og_title': content.og_title,
'og_description': content.og_description,
'og_image': content.og_image,
'canonical_url': content.canonical_url,
'contact_info': safe_json_loads(content.contact_info, {}),
'map_url': content.map_url,
'social_links': safe_json_loads(content.social_links, {}),
'footer_links': safe_json_loads(content.footer_links, {}),
'badges': safe_json_loads(content.badges, []),
'copyright_text': content.copyright_text,
'hero_title': content.hero_title,
'hero_subtitle': content.hero_subtitle,
'hero_image': content.hero_image,
'story_content': content.story_content,
'values': safe_json_loads(content.values, []),
'features': safe_json_loads(content.features, []),
'about_hero_image': content.about_hero_image,
'mission': content.mission,
'vision': content.vision,
'team': safe_json_loads(content.team, []),
'timeline': safe_json_loads(content.timeline, []),
'achievements': safe_json_loads(content.achievements, []),
'amenities_section_title': content.amenities_section_title,
'amenities_section_subtitle': content.amenities_section_subtitle,
'amenities': safe_json_loads(content.amenities, []),
'testimonials_section_title': content.testimonials_section_title,
'testimonials_section_subtitle': content.testimonials_section_subtitle,
'testimonials': safe_json_loads(content.testimonials, []),
'gallery_section_title': content.gallery_section_title,
'gallery_section_subtitle': content.gallery_section_subtitle,
'gallery_images': safe_json_loads(content.gallery_images, []),
'luxury_section_title': content.luxury_section_title,
'luxury_section_subtitle': content.luxury_section_subtitle,
'luxury_section_image': content.luxury_section_image,
'luxury_features': safe_json_loads(content.luxury_features, []),
'luxury_gallery_section_title': content.luxury_gallery_section_title,
'luxury_gallery_section_subtitle': content.luxury_gallery_section_subtitle,
'luxury_gallery': safe_json_loads(content.luxury_gallery, []),
'luxury_testimonials_section_title': content.luxury_testimonials_section_title,
'luxury_testimonials_section_subtitle': content.luxury_testimonials_section_subtitle,
'luxury_testimonials': safe_json_loads(content.luxury_testimonials, []),
'about_preview_title': content.about_preview_title,
'about_preview_subtitle': content.about_preview_subtitle,
'about_preview_content': content.about_preview_content,
'about_preview_image': content.about_preview_image,
'stats': safe_json_loads(content.stats, []),
'luxury_services_section_title': content.luxury_services_section_title,
'luxury_services_section_subtitle': content.luxury_services_section_subtitle,
'luxury_services': safe_json_loads(content.luxury_services, []),
'luxury_experiences_section_title': content.luxury_experiences_section_title,
'luxury_experiences_section_subtitle': content.luxury_experiences_section_subtitle,
'luxury_experiences': safe_json_loads(content.luxury_experiences, []),
'awards_section_title': content.awards_section_title,
'awards_section_subtitle': content.awards_section_subtitle,
'awards': safe_json_loads(content.awards, []),
'cta_title': content.cta_title,
'cta_subtitle': content.cta_subtitle,
'cta_button_text': content.cta_button_text,
'cta_button_link': content.cta_button_link,
'cta_image': content.cta_image,
'partners_section_title': content.partners_section_title,
'partners_section_subtitle': content.partners_section_subtitle,
'partners': safe_json_loads(content.partners, []),
'is_active': content.is_active,
'created_at': content.created_at.isoformat() if content.created_at else None,
'updated_at': content.updated_at.isoformat() if content.updated_at else None
}
@router.get('/')
async def get_home_content(db: Session=Depends(get_db)):