This commit is contained in:
Iliyan Angelov
2025-12-06 03:27:35 +02:00
parent 7667eb5eda
commit 5a8ca3c475
2211 changed files with 28086 additions and 37066 deletions

View File

@@ -0,0 +1,596 @@
"""
Homepage Seeder
Seeds the homepage with comprehensive content including images from Unsplash
"""
import json
import sys
from pathlib import Path
from datetime import datetime, timezone
# Add parent directory to path to import modules
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from sqlalchemy.orm import Session
from src.shared.config.database import SessionLocal, engine
from src.content.models.page_content import PageContent, PageType
from src.shared.config.logging_config import get_logger
logger = get_logger(__name__)
def get_homepage_data():
"""Generate comprehensive homepage data with Unsplash images"""
# Using Unsplash Source API for images (free, no API key needed)
# Format: https://source.unsplash.com/{width}x{height}/?{keywords}
return {
'page_type': PageType.HOME,
'title': 'Luxury Hotel & Resort',
'subtitle': 'Experience Unparalleled Elegance and Comfort',
'description': 'Welcome to our world-class luxury hotel where exceptional service meets breathtaking elegance. Discover a sanctuary of sophistication and comfort.',
'content': '<p>Experience the pinnacle of luxury hospitality at our award-winning hotel. Nestled in a prime location, we offer world-class amenities, exquisite dining, and unparalleled service that creates unforgettable memories.</p>',
# SEO Meta Tags
'meta_title': 'Luxury Hotel & Resort | Premium Accommodation & World-Class Service',
'meta_description': 'Discover luxury accommodation with world-class amenities, fine dining, and exceptional service. Book your stay at our award-winning hotel today.',
'meta_keywords': 'luxury hotel, resort, premium accommodation, fine dining, spa, business hotel, vacation, travel',
'og_title': 'Luxury Hotel & Resort - Experience Unparalleled Elegance',
'og_description': 'Welcome to our world-class luxury hotel where exceptional service meets breathtaking elegance.',
'og_image': 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=1200&h=630&fit=crop',
'canonical_url': 'https://luxuryhotel.com',
# Hero Section
'hero_title': 'Welcome to Luxury Redefined',
'hero_subtitle': 'Where Every Moment Becomes a Memory',
'hero_image': 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=1920&h=1080&fit=crop',
'hero_video_url': None,
'hero_video_poster': None,
# Story Content
'story_content': '<p>For over three decades, we have been crafting exceptional experiences for our guests. Our commitment to excellence, attention to detail, and passion for hospitality has made us a destination of choice for discerning travelers worldwide.</p>',
# Values Section
'values': json.dumps([
{
'icon': 'heart',
'title': 'Excellence',
'description': 'We strive for perfection in every detail, ensuring your experience exceeds expectations.'
},
{
'icon': 'shield',
'title': 'Trust',
'description': 'Your comfort and security are our top priorities, backed by years of trusted service.'
},
{
'icon': 'users',
'title': 'Hospitality',
'description': 'Our dedicated team is committed to making your stay memorable and delightful.'
},
{
'icon': 'award',
'title': 'Quality',
'description': 'We maintain the highest standards in service, amenities, and guest satisfaction.'
}
]),
# Features Section
'features_section_title': 'Why Choose Us',
'features_section_subtitle': 'Discover what makes us the perfect choice for your stay',
'features': json.dumps([
{
'icon': 'wifi',
'title': 'Free High-Speed WiFi',
'description': 'Stay connected with complimentary high-speed internet throughout the property.',
'image': 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&h=600&fit=crop'
},
{
'icon': 'utensils',
'title': 'Fine Dining',
'description': 'Savor exquisite cuisine at our award-winning restaurants and bars.',
'image': 'https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=800&h=600&fit=crop'
},
{
'icon': 'spa',
'title': 'Luxury Spa',
'description': 'Rejuvenate your mind and body at our world-class spa and wellness center.',
'image': 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=800&h=600&fit=crop'
},
{
'icon': 'dumbbell',
'title': 'Fitness Center',
'description': 'Maintain your workout routine in our state-of-the-art fitness facility.',
'image': 'https://images.unsplash.com/photo-1534438327276-14e5300c3a48?w=800&h=600&fit=crop'
},
{
'icon': 'swimming-pool',
'title': 'Swimming Pool',
'description': 'Relax and unwind in our stunning outdoor and indoor pools.',
'image': 'https://images.unsplash.com/photo-1571896349842-33c89424de2d?w=800&h=600&fit=crop'
},
{
'icon': 'car',
'title': 'Valet Parking',
'description': 'Complimentary valet parking service for all our guests.',
'image': 'https://images.unsplash.com/photo-1502877338535-766e1452684a?w=800&h=600&fit=crop'
}
]),
# About Preview Section
'about_preview_title': 'Our Story',
'about_preview_subtitle': 'A Legacy of Excellence',
'about_preview_content': '<p>Since our founding, we have been dedicated to providing exceptional hospitality experiences. Our commitment to excellence, combined with our passion for service, has established us as a leader in the luxury hospitality industry.</p>',
'about_preview_image': 'https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?w=1200&h=800&fit=crop',
# Stats Section
'stats_section_title': 'Our Achievements',
'stats_section_subtitle': 'Numbers that speak for themselves',
'stats': json.dumps([
{
'number': '50000+',
'label': 'Happy Guests',
'icon': 'users'
},
{
'number': '30+',
'label': 'Years of Excellence',
'icon': 'calendar'
},
{
'number': '150+',
'label': 'Awards Won',
'icon': 'award'
},
{
'number': '98%',
'label': 'Guest Satisfaction',
'icon': 'star'
}
]),
# Rooms Section
'rooms_section_title': 'Luxurious Accommodations',
'rooms_section_subtitle': 'Elegant rooms and suites designed for your comfort',
'rooms_section_button_text': 'View All Rooms',
'rooms_section_button_link': '/rooms',
'rooms_section_enabled': True,
# Luxury Services Section
'luxury_services_section_title': 'Premium Services',
'luxury_services_section_subtitle': 'Indulge in our exclusive offerings',
'services_section_button_text': 'Explore Services',
'services_section_button_link': '/services',
'services_section_limit': 6,
'luxury_services': json.dumps([
{
'icon': 'concierge',
'title': '24/7 Concierge',
'description': 'Our dedicated concierge team is available around the clock to assist with any request.',
'image': 'https://images.unsplash.com/photo-1556761175-5973dc0f32e7?w=600&h=400&fit=crop'
},
{
'icon': 'plane',
'title': 'Airport Transfer',
'description': 'Complimentary airport transfer service for a seamless arrival experience.',
'image': 'https://images.unsplash.com/photo-1449824913935-59a10b8d2000?w=600&h=400&fit=crop'
},
{
'icon': 'briefcase',
'title': 'Business Center',
'description': 'Fully equipped business center with meeting rooms and conference facilities.',
'image': 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=600&h=400&fit=crop'
},
{
'icon': 'wine',
'title': 'Wine Cellar',
'description': 'Explore our extensive collection of fine wines from around the world.',
'image': 'https://images.unsplash.com/photo-1510812431401-41d2bd2722f3?w=600&h=400&fit=crop'
},
{
'icon': 'music',
'title': 'Live Entertainment',
'description': 'Enjoy live music and entertainment in our elegant lounge areas.',
'image': 'https://images.unsplash.com/photo-1493225457124-a3eb161ffa5f?w=600&h=400&fit=crop'
},
{
'icon': 'gift',
'title': 'Gift Shop',
'description': 'Browse our curated selection of luxury gifts and souvenirs.',
'image': 'https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=600&h=400&fit=crop'
}
]),
# Luxury Experiences Section
'luxury_experiences_section_title': 'Unique Experiences',
'luxury_experiences_section_subtitle': 'Create unforgettable memories with our curated experiences',
'luxury_experiences': json.dumps([
{
'icon': 'sunset',
'title': 'Sunset Rooftop Dining',
'description': 'Dine under the stars with panoramic city views and gourmet cuisine.',
'image': 'https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=800&h=600&fit=crop'
},
{
'icon': 'compass',
'title': 'City Tours',
'description': 'Explore the city with our guided tours showcasing local culture and landmarks.',
'image': 'https://images.unsplash.com/photo-1488646953014-85cb44e25828?w=800&h=600&fit=crop'
},
{
'icon': 'camera',
'title': 'Photography Sessions',
'description': 'Capture your special moments with our professional photography services.',
'image': 'https://images.unsplash.com/photo-1516035069371-29a1b244cc32?w=800&h=600&fit=crop'
}
]),
# Amenities Section
'amenities_section_title': 'World-Class Amenities',
'amenities_section_subtitle': 'Everything you need for a perfect stay',
'amenities': json.dumps([
{
'icon': 'wifi',
'title': 'Free WiFi',
'description': 'High-speed internet access throughout the property'
},
{
'icon': 'tv',
'title': 'Smart TV',
'description': 'Streaming services and premium channels in every room'
},
{
'icon': 'coffee',
'title': 'Coffee Maker',
'description': 'Premium coffee and tea making facilities'
},
{
'icon': 'snowflake',
'title': 'Climate Control',
'description': 'Individual temperature control in all rooms'
},
{
'icon': 'lock',
'title': 'Safe',
'description': 'In-room safe for your valuables'
},
{
'icon': 'shirt',
'title': 'Laundry Service',
'description': 'Professional laundry and dry cleaning services'
}
]),
# Testimonials Section
'testimonials_section_title': 'What Our Guests Say',
'testimonials_section_subtitle': 'Real experiences from real guests',
'testimonials': json.dumps([
{
'name': 'Sarah Johnson',
'title': 'Business Traveler',
'quote': 'The service was exceptional and the rooms were immaculate. This hotel exceeded all my expectations.',
'rating': 5,
'image': 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=200&h=200&fit=crop&crop=face'
},
{
'name': 'Michael Chen',
'title': 'Honeymooner',
'quote': 'Our honeymoon was made perfect by the attentive staff and beautiful accommodations. Truly unforgettable!',
'rating': 5,
'image': 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=200&h=200&fit=crop&crop=face'
},
{
'name': 'Emily Rodriguez',
'title': 'Family Vacation',
'quote': 'Perfect for families! The kids loved the pool and the staff was so accommodating. We will definitely return.',
'rating': 5,
'image': 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=200&h=200&fit=crop&crop=face'
},
{
'name': 'David Thompson',
'title': 'Luxury Traveler',
'quote': 'The attention to detail and level of service is unmatched. This is what luxury hospitality should be.',
'rating': 5,
'image': 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=200&h=200&fit=crop&crop=face'
}
]),
# Gallery Section
'gallery_section_title': 'Photo Gallery',
'gallery_section_subtitle': 'A glimpse into our world of luxury',
'gallery_images': json.dumps([
'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1571896349842-33c89424de2d?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1542314831-068cd1dbfeeb?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1590490360182-c33d57733427?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1611892440504-42a792e24d32?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1578683010236-d716f9a3f461?w=1200&h=800&fit=crop'
]),
# Luxury Section
'luxury_section_title': 'Luxury Redefined',
'luxury_section_subtitle': 'Experience the epitome of elegance and sophistication',
'luxury_section_image': 'https://images.unsplash.com/photo-1618773928121-c32242e63f39?w=1400&h=900&fit=crop',
'luxury_features': json.dumps([
{
'icon': 'crown',
'title': 'Royal Treatment',
'description': 'Experience service fit for royalty with our personalized attention to every detail.'
},
{
'icon': 'gem',
'title': 'Premium Quality',
'description': 'Only the finest materials and furnishings grace our elegant spaces.'
},
{
'icon': 'sparkles',
'title': 'Exclusive Access',
'description': 'Enjoy exclusive access to private lounges and premium facilities.'
}
]),
# Luxury Gallery Section
'luxury_gallery_section_title': 'Luxury Gallery',
'luxury_gallery_section_subtitle': 'Discover our world of refined elegance',
'luxury_gallery': json.dumps([
'https://images.unsplash.com/photo-1618773928121-c32242e63f39?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1596394516093-501ba68a0ba6?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1631049307264-da0ec9d70304?w=1200&h=800&fit=crop',
'https://images.unsplash.com/photo-1590490360182-c33d57733427?w=1200&h=800&fit=crop'
]),
# Luxury Testimonials Section
'luxury_testimonials_section_title': 'Guest Experiences',
'luxury_testimonials_section_subtitle': 'Stories from our valued guests',
'luxury_testimonials': json.dumps([
{
'name': 'James Wilson',
'title': 'VIP Guest',
'quote': 'The level of luxury and attention to detail is simply extraordinary. This is hospitality at its finest.',
'image': 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=200&h=200&fit=crop&crop=face'
},
{
'name': 'Maria Garcia',
'title': 'Celebrity Guest',
'quote': 'Privacy, elegance, and impeccable service. This hotel understands true luxury.',
'image': 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=200&h=200&fit=crop&crop=face'
}
]),
# Awards Section
'awards_section_title': 'Awards & Recognition',
'awards_section_subtitle': 'Recognized for excellence in hospitality',
'awards': json.dumps([
{
'icon': 'trophy',
'title': 'Best Luxury Hotel 2023',
'description': 'Awarded by International Hospitality Association',
'year': '2023',
'image': 'https://images.unsplash.com/photo-1606761568499-6d2451b23c66?w=400&h=400&fit=crop'
},
{
'icon': 'star',
'title': '5-Star Rating',
'description': 'Consistently rated 5 stars by leading travel organizations',
'year': '2023',
'image': 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=400&h=400&fit=crop'
},
{
'icon': 'award',
'title': 'Excellence in Service',
'description': 'Recognized for outstanding customer service and guest satisfaction',
'year': '2022',
'image': 'https://images.unsplash.com/photo-1579621970563-ebec7560ff3e?w=400&h=400&fit=crop'
}
]),
# Partners Section
'partners_section_title': 'Our Partners',
'partners_section_subtitle': 'Trusted by leading brands and organizations',
'partners': json.dumps([
{
'name': 'Travel Partner',
'logo': 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=200&h=100&fit=crop',
'url': '#'
},
{
'name': 'Luxury Brand',
'logo': 'https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?w=200&h=100&fit=crop',
'url': '#'
},
{
'name': 'Hospitality Group',
'logo': 'https://images.unsplash.com/photo-1571896349842-33c89424de2d?w=200&h=100&fit=crop',
'url': '#'
}
]),
# CTA Section
'cta_title': 'Ready to Experience Luxury?',
'cta_subtitle': 'Book your stay today and discover why we are the preferred choice for discerning travelers',
'cta_button_text': 'Book Now',
'cta_button_link': '/book',
'cta_image': 'https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=1400&h=700&fit=crop',
# Newsletter Section
'newsletter_section_title': 'Stay Connected',
'newsletter_section_subtitle': 'Subscribe to our newsletter for exclusive offers and updates',
'newsletter_placeholder': 'Enter your email address',
'newsletter_button_text': 'Subscribe',
'newsletter_enabled': True,
# Trust Badges Section
'trust_badges_section_title': 'Why Trust Us',
'trust_badges_section_subtitle': 'Your peace of mind is our priority',
'trust_badges_enabled': True,
'trust_badges': json.dumps([
{
'icon': 'shield-check',
'title': 'Secure Booking',
'description': 'Your data and payments are protected with industry-leading security'
},
{
'icon': 'clock',
'title': '24/7 Support',
'description': 'Round-the-clock customer support for all your needs'
},
{
'icon': 'undo',
'title': 'Flexible Cancellation',
'description': 'Free cancellation up to 24 hours before check-in'
},
{
'icon': 'check-circle',
'title': 'Best Price Guarantee',
'description': 'We guarantee the best rates for your stay'
}
]),
# Promotions Section
'promotions_section_title': 'Special Offers',
'promotions_section_subtitle': 'Exclusive deals and packages for our guests',
'promotions_enabled': True,
'promotions': json.dumps([
{
'title': 'Early Bird Special',
'description': 'Book 30 days in advance and save 20%',
'discount': '20% OFF',
'image': 'https://images.unsplash.com/photo-1566073771259-6a8506099945?w=800&h=600&fit=crop',
'link': '/promotions/early-bird'
},
{
'title': 'Weekend Getaway',
'description': 'Perfect weekend escape with complimentary breakfast',
'discount': '15% OFF',
'image': 'https://images.unsplash.com/photo-1520250497591-112f2f40a3f4?w=800&h=600&fit=crop',
'link': '/promotions/weekend'
},
{
'title': 'Honeymoon Package',
'description': 'Romantic getaway with special amenities and services',
'discount': '25% OFF',
'image': 'https://images.unsplash.com/photo-1571896349842-33c89424de2d?w=800&h=600&fit=crop',
'link': '/promotions/honeymoon'
}
]),
# Blog Section
'blog_section_title': 'Latest News & Updates',
'blog_section_subtitle': 'Stay informed with our latest articles and hotel news',
'blog_posts_limit': 3,
'blog_enabled': True,
# Sections Enabled
'sections_enabled': json.dumps({
'hero': True,
'features': True,
'about_preview': True,
'stats': True,
'rooms': True,
'services': True,
'experiences': True,
'amenities': True,
'testimonials': True,
'gallery': True,
'luxury': True,
'awards': True,
'partners': True,
'cta': True,
'newsletter': True,
'trust_badges': True,
'promotions': True,
'blog': True
}),
# Badges
'badges': json.dumps([
{
'text': '5-Star Rated',
'icon': 'star'
},
{
'text': 'Award Winning',
'icon': 'award'
},
{
'text': 'Eco-Friendly',
'icon': 'leaf'
}
]),
# Social Links
'social_links': json.dumps({
'facebook': 'https://facebook.com/luxuryhotel',
'twitter': 'https://twitter.com/luxuryhotel',
'instagram': 'https://instagram.com/luxuryhotel',
'linkedin': 'https://linkedin.com/company/luxuryhotel',
'youtube': 'https://youtube.com/luxuryhotel'
}),
# Contact Info
'contact_info': json.dumps({
'phone': '+1 (555) 123-4567',
'email': 'info@luxuryhotel.com',
'address': '123 Luxury Avenue, Premium City, PC 12345'
}),
# Active Status
'is_active': True,
'created_at': datetime.now(timezone.utc),
'updated_at': datetime.now(timezone.utc)
}
def seed_homepage(db: Session):
"""Seed the homepage content"""
try:
# Check if homepage already exists
existing = db.query(PageContent).filter(PageContent.page_type == PageType.HOME).first()
if existing:
logger.info('Homepage content already exists. Updating...')
# Update existing content
data = get_homepage_data()
for key, value in data.items():
if key != 'page_type': # Don't update page_type
setattr(existing, key, value)
existing.updated_at = datetime.now(timezone.utc)
db.commit()
logger.info('Homepage content updated successfully!')
return existing
else:
logger.info('Creating new homepage content...')
# Create new content
data = get_homepage_data()
homepage = PageContent(**data)
db.add(homepage)
db.commit()
db.refresh(homepage)
logger.info('Homepage content created successfully!')
return homepage
except Exception as e:
logger.error(f'Error seeding homepage: {str(e)}', exc_info=True)
db.rollback()
raise
def main():
"""Main function to run the seeder"""
logger.info('Starting homepage seeder...')
db = SessionLocal()
try:
homepage = seed_homepage(db)
logger.info(f'Homepage seeder completed successfully! ID: {homepage.id}')
except Exception as e:
logger.error(f'Failed to seed homepage: {str(e)}', exc_info=True)
sys.exit(1)
finally:
db.close()
if __name__ == '__main__':
main()