168 lines
7.7 KiB
Python
168 lines
7.7 KiB
Python
"""
|
|
Contact Page Seeder
|
|
Seeds the database with comprehensive contact page content
|
|
All images are from Unsplash (free stock photos)
|
|
"""
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
from datetime import datetime, timezone
|
|
|
|
# Add parent directory to path to allow importing from src
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
|
|
from sqlalchemy.orm import Session
|
|
from src.shared.config.database import SessionLocal
|
|
from src.shared.config.logging_config import get_logger
|
|
from src.content.models.page_content import PageContent, PageType
|
|
|
|
# Import all models to ensure relationships are loaded
|
|
from src.models import *
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
def get_contact_page_data():
|
|
"""Generate comprehensive contact page data with Unsplash images"""
|
|
|
|
now = datetime.now(timezone.utc)
|
|
|
|
return {
|
|
'page_type': PageType.CONTACT,
|
|
'title': 'Contact Us',
|
|
'subtitle': 'We\'re Here to Help - Get in Touch',
|
|
'description': 'Have questions or need assistance? Our friendly team is available 24/7 to help with reservations, inquiries, and special requests. Reach out to us through any of the methods below.',
|
|
'content': '<p>We value your feedback and are here to assist you with any questions or requests. Whether you\'re planning a stay, have a question about our services, or need assistance during your visit, our team is ready to help.</p>',
|
|
'meta_title': 'Contact Us | Luxury Hotel & Resort - Get in Touch',
|
|
'meta_description': 'Contact our luxury hotel for reservations, inquiries, or assistance. Our friendly team is available 24/7. Phone, email, and location information.',
|
|
'meta_keywords': 'contact us, hotel contact, reservations, customer service, hotel phone number, hotel email',
|
|
'og_title': 'Contact Us - Luxury Hotel & Resort',
|
|
'og_description': 'Have questions or need assistance? Our friendly team is available 24/7 to help with reservations, inquiries, and special requests.',
|
|
'og_image': 'https://images.unsplash.com/photo-1556761175-5973dc0f32e7?w=1200&h=630&fit=crop',
|
|
'canonical_url': 'https://luxuryhotel.com/contact',
|
|
'hero_title': 'Get in Touch',
|
|
'hero_subtitle': 'We\'re Here to Help You',
|
|
'hero_image': 'https://images.unsplash.com/photo-1556761175-5973dc0f32e7?w=1920&h=1080&fit=crop',
|
|
'hero_video_url': None,
|
|
'hero_video_poster': None,
|
|
'contact_info': json.dumps({
|
|
'phone': '+1 (555) 123-4567',
|
|
'toll_free': '+1 (800) 123-4567',
|
|
'email': 'info@luxuryhotel.com',
|
|
'reservations_email': 'reservations@luxuryhotel.com',
|
|
'address': '123 Luxury Avenue, Premium City, PC 12345',
|
|
'address_line2': 'United States',
|
|
'business_hours': {
|
|
'front_desk': '24/7',
|
|
'concierge': '24/7',
|
|
'reservations': 'Monday - Sunday: 8:00 AM - 10:00 PM',
|
|
'restaurant': 'Breakfast: 7:00 AM - 11:00 AM, Lunch: 12:00 PM - 3:00 PM, Dinner: 6:00 PM - 11:00 PM',
|
|
'spa': 'Monday - Sunday: 9:00 AM - 9:00 PM'
|
|
}
|
|
}),
|
|
'map_url': 'https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3022.184132576!2d-73.98811768459418!3d40.75889597932681!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89c25855c6480299%3A0x55194ec5a1ae072e!2sTimes%20Square!5e0!3m2!1sen!2sus!4v1234567890123!5m2!1sen!2sus',
|
|
'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',
|
|
'pinterest': 'https://pinterest.com/luxuryhotel'
|
|
}),
|
|
'testimonials': json.dumps([
|
|
{
|
|
'name': 'Sarah Johnson',
|
|
'title': 'Guest',
|
|
'quote': 'The customer service team was incredibly helpful and responsive. They answered all my questions and made my booking process seamless.',
|
|
'rating': 5,
|
|
'image': 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=200&h=200&fit=crop&crop=face'
|
|
},
|
|
{
|
|
'name': 'Michael Chen',
|
|
'title': 'Business Traveler',
|
|
'quote': 'The concierge team went above and beyond to help with my business needs. Their attention to detail and professionalism is outstanding.',
|
|
'rating': 5,
|
|
'image': 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=200&h=200&fit=crop&crop=face'
|
|
}
|
|
]),
|
|
'testimonials_section_title': 'What Our Guests Say About Our Service',
|
|
'testimonials_section_subtitle': 'Real feedback from our valued guests',
|
|
'features': json.dumps([
|
|
{
|
|
'icon': 'phone',
|
|
'title': '24/7 Support',
|
|
'description': 'Our team is available around the clock to assist you with any questions or requests.'
|
|
},
|
|
{
|
|
'icon': 'clock',
|
|
'title': 'Quick Response',
|
|
'description': 'We respond to all inquiries within 24 hours, often much sooner.'
|
|
},
|
|
{
|
|
'icon': 'users',
|
|
'title': 'Expert Team',
|
|
'description': 'Our knowledgeable staff is trained to provide exceptional service and assistance.'
|
|
},
|
|
{
|
|
'icon': 'globe',
|
|
'title': 'Multiple Languages',
|
|
'description': 'We speak your language. Our team is fluent in multiple languages to serve international guests.'
|
|
}
|
|
]),
|
|
'features_section_title': 'Why Contact Us',
|
|
'features_section_subtitle': 'We\'re committed to providing exceptional service',
|
|
'gallery_images': json.dumps([
|
|
'https://images.unsplash.com/photo-1556761175-5973dc0f32e7?w=1200&h=800&fit=crop',
|
|
'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'
|
|
]),
|
|
'gallery_section_title': 'Visit Our Hotel',
|
|
'gallery_section_subtitle': 'Experience our luxury facilities',
|
|
'is_active': True,
|
|
'created_at': now,
|
|
'updated_at': now
|
|
}
|
|
|
|
|
|
def seed_contact_page(db: Session):
|
|
"""Seed contact page content into the database"""
|
|
try:
|
|
contact_data = get_contact_page_data()
|
|
|
|
# Check if contact page content already exists
|
|
existing_content = db.query(PageContent).filter(PageContent.page_type == PageType.CONTACT).first()
|
|
|
|
if existing_content:
|
|
logger.info('Updating existing contact page content...')
|
|
for key, value in contact_data.items():
|
|
if key not in ['id', 'page_type', 'created_at']: # Don't update primary key or creation date
|
|
setattr(existing_content, key, value)
|
|
existing_content.updated_at = datetime.now(timezone.utc)
|
|
else:
|
|
logger.info('Creating new contact page content...')
|
|
contact_page = PageContent(**contact_data)
|
|
db.add(contact_page)
|
|
|
|
db.commit()
|
|
logger.info('Contact page content seeded successfully!')
|
|
except Exception as e:
|
|
db.rollback()
|
|
logger.error(f'Error seeding contact page: {str(e)}', exc_info=True)
|
|
raise
|
|
|
|
|
|
def main():
|
|
db = SessionLocal()
|
|
try:
|
|
seed_contact_page(db)
|
|
except Exception as e:
|
|
logger.error(f'Failed to seed contact page: {str(e)}', exc_info=True)
|
|
sys.exit(1)
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|