""" 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': '
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.
', # 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': '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.
', # 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': '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.
', '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()