This commit is contained in:
Iliyan Angelov
2025-12-05 00:01:15 +02:00
parent 9f1aeb32da
commit 99da0afecd
24 changed files with 3701 additions and 569 deletions

View File

@@ -0,0 +1,51 @@
"""add_service_detail_fields
Revision ID: service_detail_001
Revises: staff_shifts_001
Create Date: 2024-12-04 22:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql
# revision identifiers, used by Alembic.
revision = 'service_detail_001'
down_revision = 'staff_shifts_001'
branch_labels = None
depends_on = None
def upgrade() -> None:
# Add slug column with unique index
op.add_column('services', sa.Column('slug', sa.String(200), nullable=True))
op.create_index(op.f('ix_services_slug'), 'services', ['slug'], unique=True)
# Add image column
op.add_column('services', sa.Column('image', sa.String(1000), nullable=True))
# Add content column for full HTML content
op.add_column('services', sa.Column('content', sa.Text(), nullable=True))
# Add sections column for advanced content blocks (stored as JSON)
op.add_column('services', sa.Column('sections', sa.Text(), nullable=True))
# Add SEO meta fields
op.add_column('services', sa.Column('meta_title', sa.String(500), nullable=True))
op.add_column('services', sa.Column('meta_description', sa.Text(), nullable=True))
op.add_column('services', sa.Column('meta_keywords', sa.String(1000), nullable=True))
# Rename is_active to status for consistency (optional, but let's keep is_active and add status)
# Actually, let's keep is_active as is for backward compatibility
def downgrade() -> None:
op.drop_index(op.f('ix_services_slug'), table_name='services')
op.drop_column('services', 'meta_keywords')
op.drop_column('services', 'meta_description')
op.drop_column('services', 'meta_title')
op.drop_column('services', 'sections')
op.drop_column('services', 'content')
op.drop_column('services', 'image')
op.drop_column('services', 'slug')

View File

@@ -12,7 +12,60 @@ def seed_homepage_content(db: Session):
luxury_features = [{'icon': 'Sparkles', 'title': 'Premium Amenities', 'description': 'World-class facilities designed for your comfort and relaxation'}, {'icon': 'Crown', 'title': 'Royal Service', 'description': 'Dedicated concierge service available 24/7 for all your needs'}, {'icon': 'Award', 'title': 'Award-Winning', 'description': 'Recognized for excellence in hospitality and guest satisfaction'}, {'icon': 'Shield', 'title': 'Secure & Private', 'description': 'Your privacy and security are our top priorities'}, {'icon': 'Heart', 'title': 'Personalized Care', 'description': 'Tailored experiences crafted just for you'}, {'icon': 'Gem', 'title': 'Luxury Design', 'description': 'Elegantly designed spaces with attention to every detail'}]
luxury_gallery = ['https://images.unsplash.com/photo-1566073771259-6a8506099945?w=800', 'https://images.unsplash.com/photo-1571896349842-33c89424de2d?w=800', 'https://images.unsplash.com/photo-1582719478250-c89cae4dc85b?w=800', 'https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=800', 'https://images.unsplash.com/photo-1590490360182-c33d57733427?w=800', 'https://images.unsplash.com/photo-1551882547-ff40c63fe5fa?w=800']
luxury_testimonials = [{'name': 'Sarah Johnson', 'title': 'Business Executive', 'quote': 'An absolutely stunning experience. The attention to detail and level of service exceeded all expectations.', 'image': 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=200'}, {'name': 'Michael Chen', 'title': 'Travel Enthusiast', 'quote': 'The epitome of luxury. Every moment was perfect, from check-in to check-out.', 'image': 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=200'}, {'name': 'Emma Williams', 'title': 'Luxury Traveler', 'quote': 'This hotel redefines what luxury means. I will definitely return.', 'image': 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=200'}]
luxury_services = [{'icon': 'UtensilsCrossed', 'title': 'Fine Dining', 'description': 'Michelin-starred restaurants offering world-class cuisine', 'image': 'https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=600'}, {'icon': 'Wine', 'title': 'Premium Bar', 'description': 'Extensive wine collection and craft cocktails in elegant settings', 'image': 'https://images.unsplash.com/photo-1514362545857-3bc16c4c7d1b?w=600'}, {'icon': 'Dumbbell', 'title': 'Spa & Wellness', 'description': 'Rejuvenating spa treatments and state-of-the-art fitness center', 'image': 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=600'}, {'icon': 'Car', 'title': 'Concierge Services', 'description': 'Personalized assistance for all your travel and entertainment needs', 'image': 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=600'}]
luxury_services = [
{
'icon': 'UtensilsCrossed',
'title': 'Fine Dining',
'description': 'Michelin-starred restaurants offering world-class cuisine',
'image': 'https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=600',
'slug': 'fine-dining',
'category': 'Dining',
'content': '<p>Experience culinary excellence at our Michelin-starred restaurants. Our world-renowned chefs craft exquisite dishes using the finest ingredients sourced from around the globe. From intimate dining experiences to grand celebrations, we offer a variety of settings to suit every occasion.</p><p>Our restaurants feature seasonal menus that showcase the best of local and international cuisine, paired with an extensive wine collection curated by our master sommelier.</p>',
'sections': [],
'meta_title': 'Fine Dining Experience - Luxury Hotel',
'meta_description': 'Discover our Michelin-starred restaurants offering world-class cuisine in elegant settings.',
'meta_keywords': 'fine dining, michelin star, luxury restaurant, gourmet cuisine'
},
{
'icon': 'Wine',
'title': 'Premium Bar',
'description': 'Extensive wine collection and craft cocktails in elegant settings',
'image': 'https://images.unsplash.com/photo-1514362545857-3bc16c4c7d1b?w=600',
'slug': 'premium-bar',
'category': 'Dining',
'content': '<p>Unwind in sophistication at our premium bar, featuring an extensive collection of rare wines, vintage spirits, and expertly crafted cocktails. Our master mixologists create unique beverages tailored to your preferences.</p><p>The elegant ambiance, combined with live music on select evenings, creates the perfect setting for business meetings, romantic evenings, or casual gatherings with friends.</p>',
'sections': [],
'meta_title': 'Premium Bar & Lounge - Luxury Hotel',
'meta_description': 'Enjoy an extensive wine collection and craft cocktails in our elegant bar and lounge.',
'meta_keywords': 'premium bar, wine collection, craft cocktails, luxury lounge'
},
{
'icon': 'Dumbbell',
'title': 'Spa & Wellness',
'description': 'Rejuvenating spa treatments and state-of-the-art fitness center',
'image': 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=600',
'slug': 'spa-wellness',
'category': 'Wellness',
'content': '<p>Escape to tranquility at our world-class spa and wellness center. Indulge in a range of rejuvenating treatments designed to restore balance and vitality. Our expert therapists use premium products and ancient techniques to provide an unparalleled wellness experience.</p><p>Our state-of-the-art fitness center is equipped with the latest equipment and offers personal training sessions, yoga classes, and wellness programs tailored to your needs.</p>',
'sections': [],
'meta_title': 'Spa & Wellness Center - Luxury Hotel',
'meta_description': 'Rejuvenate with our spa treatments and state-of-the-art fitness facilities.',
'meta_keywords': 'spa, wellness, fitness center, massage, luxury spa'
},
{
'icon': 'Car',
'title': 'Concierge Services',
'description': 'Personalized assistance for all your travel and entertainment needs',
'image': 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=600',
'slug': 'concierge-services',
'category': 'Services',
'content': '<p>Our dedicated concierge team is available 24/7 to ensure your stay is nothing short of extraordinary. From restaurant reservations and event tickets to private tours and transportation arrangements, we handle every detail with precision and care.</p><p>Whether you need assistance with business arrangements, special celebrations, or unique local experiences, our concierge team has the expertise and connections to make it happen.</p>',
'sections': [],
'meta_title': 'Concierge Services - Luxury Hotel',
'meta_description': 'Personalized assistance for all your travel and entertainment needs, available 24/7.',
'meta_keywords': 'concierge, personal assistant, travel services, luxury service'
}
]
luxury_experiences = [{'icon': 'Sunset', 'title': 'Sunset Rooftop', 'description': 'Breathtaking views and exclusive rooftop experiences', 'image': 'https://images.unsplash.com/photo-1514933651103-005eec06c04b?w=600'}, {'icon': 'Ship', 'title': 'Yacht Excursions', 'description': 'Private yacht charters for unforgettable sea adventures', 'image': 'https://images.unsplash.com/photo-1544551763-46a013bb70d5?w=600'}, {'icon': 'Music', 'title': 'Live Entertainment', 'description': 'World-class performances and exclusive events', 'image': 'https://images.unsplash.com/photo-1470229722913-7c0e2dbbafd3?w=600'}, {'icon': 'Palette', 'title': 'Art & Culture', 'description': 'Curated art collections and cultural experiences', 'image': 'https://images.unsplash.com/photo-1578301978018-3005759f48f7?w=600'}]
awards = [{'icon': 'Trophy', 'title': 'Best Luxury Hotel 2024', 'description': 'Awarded by International Luxury Travel Association', 'image': 'https://images.unsplash.com/photo-1579783902614-a3fb3927b6a5?w=400', 'year': '2024'}, {'icon': 'Star', 'title': '5-Star Excellence', 'description': 'Consistently rated 5 stars by leading travel publications', 'image': 'https://images.unsplash.com/photo-1606761568499-6d2451b23c66?w=400', 'year': '2023'}, {'icon': 'Award', 'title': 'Sustainable Luxury', 'description': 'Recognized for environmental responsibility and sustainability', 'image': 'https://images.unsplash.com/photo-1473341304170-971dccb5ac1e?w=400', 'year': '2024'}]
partners = [{'name': 'Luxury Travel Group', 'logo': 'https://images.unsplash.com/photo-1599305445671-ac291c95aaa9?w=200', 'link': '#'}, {'name': 'Premium Airlines', 'logo': 'https://images.unsplash.com/photo-1436491865332-7a61a109cc05?w=200', 'link': '#'}, {'name': 'Exclusive Events', 'logo': 'https://images.unsplash.com/photo-1511578314322-379afb476865?w=200', 'link': '#'}, {'name': 'Fine Dining Network', 'logo': 'https://images.unsplash.com/photo-1555396273-367ea4eb4db5?w=200', 'link': '#'}]

View File

@@ -0,0 +1,218 @@
import sys
import os
import json
import re
from pathlib import Path
# Add parent directory to path to import from src
sys.path.insert(0, str(Path(__file__).parent.parent))
from sqlalchemy.orm import Session
from src.shared.config.database import SessionLocal
# Import all models to ensure relationships are set up
from src.models import * # This ensures all models are loaded and relationships are configured
from src.hotel_services.models.service import Service
def generate_slug(name: str) -> str:
"""Generate a URL-friendly slug from a name"""
slug = name.lower()
slug = re.sub(r'[^a-z0-9\s-]', '', slug)
slug = re.sub(r'\s+', '-', slug)
slug = re.sub(r'-+', '-', slug)
return slug.strip('-')
def seed_services(db: Session):
"""Seed initial services data"""
print('Seeding services...')
services_data = [
{
'name': 'Room Service',
'description': '24/7 in-room dining service with a wide selection of gourmet meals, snacks, and beverages delivered directly to your room.',
'price': 25.00,
'category': 'Dining',
'slug': 'room-service',
'image': 'https://images.unsplash.com/photo-1556911220-bff31c812dba?w=600',
'content': '<p>Enjoy the convenience of 24/7 room service with our extensive menu featuring international cuisine, local specialties, and premium beverages. Our professional staff ensures your meals are delivered hot, fresh, and beautifully presented.</p><p>From breakfast in bed to late-night snacks, we cater to all your dining needs with the highest standards of quality and service.</p>',
'sections': json.dumps([]),
'meta_title': 'Room Service - Luxury Hotel',
'meta_description': '24/7 in-room dining service with gourmet meals delivered to your room.',
'meta_keywords': 'room service, in-room dining, hotel service, 24/7 service',
'is_active': True
},
{
'name': 'Spa & Massage',
'description': 'Relaxing spa treatments and professional massage therapy to rejuvenate your mind and body.',
'price': 120.00,
'category': 'Wellness',
'slug': 'spa-massage',
'image': 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=600',
'content': '<p>Indulge in our world-class spa treatments designed to restore balance and vitality. Our expert therapists offer a range of services including Swedish massage, deep tissue massage, hot stone therapy, and aromatherapy.</p><p>Each treatment is customized to your preferences, using premium products and ancient techniques to provide an unparalleled wellness experience.</p>',
'sections': json.dumps([]),
'meta_title': 'Spa & Massage Services - Luxury Hotel',
'meta_description': 'Professional spa treatments and massage therapy for ultimate relaxation and rejuvenation.',
'meta_keywords': 'spa, massage, wellness, relaxation, therapy',
'is_active': True
},
{
'name': 'Laundry Service',
'description': 'Professional dry cleaning and laundry service with same-day or next-day delivery options.',
'price': 15.00,
'category': 'Housekeeping',
'slug': 'laundry-service',
'image': 'https://images.unsplash.com/photo-1582735689369-4fe89db7114c?w=600',
'content': '<p>Keep your wardrobe fresh and clean with our professional laundry and dry cleaning service. We handle everything from delicate garments to business suits with the utmost care and attention.</p><p>Choose from same-day express service or standard next-day delivery. All items are professionally cleaned, pressed, and returned to your room.</p>',
'sections': json.dumps([]),
'meta_title': 'Laundry & Dry Cleaning Service - Luxury Hotel',
'meta_description': 'Professional laundry and dry cleaning service with same-day or next-day delivery.',
'meta_keywords': 'laundry, dry cleaning, hotel service, cleaning',
'is_active': True
},
{
'name': 'Airport Transfer',
'description': 'Complimentary airport pickup and drop-off service in luxury vehicles with professional drivers.',
'price': 50.00,
'category': 'Transportation',
'slug': 'airport-transfer',
'image': 'https://images.unsplash.com/photo-1449824913935-59a10b8d2000?w=600',
'content': '<p>Travel in comfort and style with our premium airport transfer service. Our fleet of luxury vehicles, including sedans and SUVs, ensures a smooth and comfortable journey to or from the airport.</p><p>Our professional drivers are punctual, courteous, and knowledgeable about the local area. Flight monitoring ensures we adjust to any delays or early arrivals.</p>',
'sections': json.dumps([]),
'meta_title': 'Airport Transfer Service - Luxury Hotel',
'meta_description': 'Premium airport pickup and drop-off service in luxury vehicles.',
'meta_keywords': 'airport transfer, transportation, airport shuttle, luxury car',
'is_active': True
},
{
'name': 'Concierge Service',
'description': 'Personalized assistance for restaurant reservations, event tickets, tours, and special requests.',
'price': 0.00,
'category': 'Concierge',
'slug': 'concierge-service',
'image': 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=600',
'content': '<p>Our dedicated concierge team is available 24/7 to ensure your stay is nothing short of extraordinary. From restaurant reservations and event tickets to private tours and transportation arrangements, we handle every detail with precision and care.</p><p>Whether you need assistance with business arrangements, special celebrations, or unique local experiences, our concierge team has the expertise and connections to make it happen.</p>',
'sections': json.dumps([]),
'meta_title': 'Concierge Services - Luxury Hotel',
'meta_description': 'Personalized assistance for all your travel and entertainment needs, available 24/7.',
'meta_keywords': 'concierge, personal assistant, travel services, luxury service',
'is_active': True
},
{
'name': 'Fitness Center Access',
'description': 'Access to our state-of-the-art fitness center with modern equipment and personal training options.',
'price': 20.00,
'category': 'Wellness',
'slug': 'fitness-center',
'image': 'https://images.unsplash.com/photo-1534438327276-14e5300c3a48?w=600',
'content': '<p>Maintain your fitness routine at our fully equipped fitness center featuring the latest cardio and strength training equipment. Our facilities are open 24/7 for your convenience.</p><p>Enhance your workout with personal training sessions, group fitness classes, or yoga sessions led by certified instructors. Towels, water, and fresh fruit are provided.</p>',
'sections': json.dumps([]),
'meta_title': 'Fitness Center - Luxury Hotel',
'meta_description': 'State-of-the-art fitness center with modern equipment and personal training options.',
'meta_keywords': 'fitness center, gym, workout, exercise, personal training',
'is_active': True
},
{
'name': 'Business Center',
'description': 'Fully equipped business center with meeting rooms, printing, copying, and secretarial services.',
'price': 30.00,
'category': 'Business',
'slug': 'business-center',
'image': 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=600',
'content': '<p>Stay productive with our fully equipped business center featuring private meeting rooms, high-speed internet, printing and copying services, and professional secretarial support.</p><p>Our meeting rooms can accommodate small groups and are equipped with presentation equipment, video conferencing capabilities, and refreshments.</p>',
'sections': json.dumps([]),
'meta_title': 'Business Center Services - Luxury Hotel',
'meta_description': 'Fully equipped business center with meeting rooms and professional services.',
'meta_keywords': 'business center, meeting room, conference, office services',
'is_active': True
},
{
'name': 'Valet Parking',
'description': 'Secure valet parking service with 24/7 vehicle care and quick retrieval.',
'price': 35.00,
'category': 'Transportation',
'slug': 'valet-parking',
'image': 'https://images.unsplash.com/photo-1502877338535-766e1452684a?w=600',
'content': '<p>Enjoy the convenience of valet parking with our professional service. Your vehicle will be safely parked and secured, ready for quick retrieval whenever you need it.</p><p>Our valet team is available 24/7 and can also assist with luggage handling and vehicle care services.</p>',
'sections': json.dumps([]),
'meta_title': 'Valet Parking Service - Luxury Hotel',
'meta_description': 'Secure valet parking service with 24/7 vehicle care and quick retrieval.',
'meta_keywords': 'valet parking, parking service, car service, vehicle care',
'is_active': True
},
{
'name': 'Babysitting Service',
'description': 'Professional and certified babysitting service for your peace of mind.',
'price': 25.00,
'category': 'Family',
'slug': 'babysitting-service',
'image': 'https://images.unsplash.com/photo-1503454537195-1dcabb73ffb9?w=600',
'content': '<p>Enjoy your time knowing your children are in safe hands with our professional babysitting service. Our certified caregivers are experienced, background-checked, and trained in child safety and first aid.</p><p>Available for both in-room care and supervised activities, we ensure your children are entertained and well-cared for while you enjoy your stay.</p>',
'sections': json.dumps([]),
'meta_title': 'Babysitting Service - Luxury Hotel',
'meta_description': 'Professional and certified babysitting service for your peace of mind.',
'meta_keywords': 'babysitting, childcare, kids service, family service',
'is_active': True
},
{
'name': 'Pet Care Service',
'description': 'Pet-friendly accommodations with pet care services including walking, feeding, and grooming.',
'price': 20.00,
'category': 'Pet Services',
'slug': 'pet-care-service',
'image': 'https://images.unsplash.com/photo-1601758228041-f3b2795255f1?w=600',
'content': '<p>Your furry friends are welcome at our hotel! We offer pet-friendly accommodations and a range of pet care services including daily walks, feeding, and grooming.</p><p>Our pet care team ensures your pets are comfortable and well-cared for during your stay. Pet amenities including beds, bowls, and treats are provided.</p>',
'sections': json.dumps([]),
'meta_title': 'Pet Care Services - Luxury Hotel',
'meta_description': 'Pet-friendly accommodations with professional pet care services.',
'meta_keywords': 'pet care, pet service, dog walking, pet friendly',
'is_active': True
}
]
created_count = 0
updated_count = 0
for service_data in services_data:
# Check if service already exists by slug
existing = db.query(Service).filter(Service.slug == service_data['slug']).first()
if existing:
# Update existing service
for key, value in service_data.items():
if key != 'slug': # Don't update slug
setattr(existing, key, value)
updated_count += 1
print(f' ✓ Updated service: {service_data["name"]}')
else:
# Create new service
service = Service(**service_data)
db.add(service)
created_count += 1
print(f' ✓ Created service: {service_data["name"]}')
db.commit()
print(f'\n✓ Services seeded successfully!')
print(f' - Created: {created_count}')
print(f' - Updated: {updated_count}')
print(f' - Total: {len(services_data)}\n')
def main():
db: Session = SessionLocal()
try:
print('=' * 80)
print('SEEDING SERVICES')
print('=' * 80)
print()
seed_services(db)
print('=' * 80)
print('✓ All services data seeded successfully!')
print('=' * 80)
except Exception as e:
db.rollback()
print(f'\n✗ Error seeding services: {e}')
import traceback
traceback.print_exc()
raise
finally:
db.close()
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,756 @@
import sys
import os
import json
import re
from pathlib import Path
# Add parent directory to path to import from src
sys.path.insert(0, str(Path(__file__).parent.parent))
from sqlalchemy.orm import Session
from src.shared.config.database import SessionLocal
# Import all models to ensure relationships are set up
from src.models import * # This ensures all models are loaded and relationships are configured
from src.hotel_services.models.service import Service
def generate_slug(name: str) -> str:
"""Generate a URL-friendly slug from a name"""
slug = name.lower()
slug = re.sub(r'[^a-z0-9\s-]', '', slug)
slug = re.sub(r'\s+', '-', slug)
slug = re.sub(r'-+', '-', slug)
return slug.strip('-')
def seed_enterprise_services(db: Session):
"""Seed enterprise-level services with rich detail page content"""
print('Seeding enterprise services...')
services_data = [
{
'name': 'Luxury Spa & Wellness Retreat',
'description': 'Indulge in our world-class spa treatments designed to restore balance and vitality. Experience ultimate relaxation with our expert therapists.',
'price': 250.00,
'category': 'Wellness',
'slug': 'luxury-spa-wellness-retreat',
'image': 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Experience Ultimate Relaxation</h2>
<p>Our Luxury Spa & Wellness Retreat offers an unparalleled journey of rejuvenation and tranquility. Nestled in a serene environment, our spa combines ancient healing traditions with modern wellness techniques to create a transformative experience.</p>
<h3>What's Included</h3>
<ul>
<li>90-minute signature massage therapy</li>
<li>Access to steam room and sauna</li>
<li>Complimentary herbal tea and refreshments</li>
<li>Premium aromatherapy oils and products</li>
<li>Relaxation lounge access</li>
</ul>
<h3>Our Signature Treatments</h3>
<p>Choose from our curated selection of treatments including Swedish massage, deep tissue therapy, hot stone massage, and aromatherapy sessions. Each treatment is customized to your specific needs and preferences.</p>
<h3>Expert Therapists</h3>
<p>Our team of certified therapists brings years of experience and a deep understanding of holistic wellness. They are trained in various massage techniques and wellness practices to ensure you receive the highest quality care.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Transform Your Wellbeing',
'content': 'Discover a sanctuary of peace and rejuvenation where every detail is designed to restore your mind, body, and spirit.',
'image': 'https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=1200&h=600&fit=crop'
},
{
'type': 'features',
'title': 'Why Choose Our Spa',
'features': [
{'title': 'Expert Therapists', 'description': 'Certified professionals with years of experience', 'icon': 'User'},
{'title': 'Premium Products', 'description': 'Luxury skincare and aromatherapy products', 'icon': 'Sparkles'},
{'title': 'Customized Treatments', 'description': 'Personalized sessions tailored to your needs', 'icon': 'Heart'},
{'title': 'Serene Environment', 'description': 'Peaceful setting designed for relaxation', 'icon': 'Leaf'}
]
},
{
'type': 'quote',
'quote': 'The most luxurious spa experience I\'ve ever had. Truly transformative.',
'author': 'Sarah M., Guest'
}
]),
'meta_title': 'Luxury Spa & Wellness Retreat - Premium Hotel Services',
'meta_description': 'Experience ultimate relaxation with our world-class spa treatments. Expert therapists, premium products, and a serene environment await you.',
'meta_keywords': 'luxury spa, wellness retreat, massage therapy, hotel spa, relaxation, aromatherapy, wellness services',
'is_active': True
},
{
'name': 'Fine Dining Experience',
'description': 'Savor culinary excellence at our Michelin-starred restaurants. World-renowned chefs craft exquisite dishes using the finest ingredients.',
'price': 150.00,
'category': 'Dining',
'slug': 'fine-dining-experience',
'image': 'https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Culinary Excellence Awaits</h2>
<p>Embark on a gastronomic journey at our award-winning restaurants, where culinary artistry meets exceptional service. Our Michelin-starred chefs create masterpieces that celebrate both local traditions and international flavors.</p>
<h3>Our Restaurants</h3>
<ul>
<li><strong>The Grand Ballroom:</strong> Elegant fine dining with seasonal tasting menus</li>
<li><strong>Sky Terrace:</strong> Rooftop dining with panoramic city views</li>
<li><strong>Chef's Table:</strong> Intimate 8-seat private dining experience</li>
<li><strong>Wine Cellar:</strong> Exclusive wine pairing dinners</li>
</ul>
<h3>What's Included</h3>
<ul>
<li>Multi-course tasting menu</li>
<li>Wine pairing recommendations</li>
<li>Complimentary amuse-bouche</li>
<li>Professional sommelier service</li>
<li>Personalized menu customization</li>
</ul>
<h3>Reservation Information</h3>
<p>Reservations are recommended and can be made through our concierge or directly at the restaurant. Special dietary requirements and preferences are accommodated with advance notice.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'A Culinary Journey Like No Other',
'content': 'Where every dish tells a story and every meal becomes a memory.',
'image': 'https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=1200&h=600&fit=crop'
},
{
'type': 'gallery',
'title': 'Our Culinary Creations',
'images': [
'https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=800',
'https://images.unsplash.com/photo-1556911220-bff31c812dba?w=800',
'https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=800'
]
},
{
'type': 'quote',
'quote': 'An extraordinary dining experience that exceeded all expectations. The attention to detail is remarkable.',
'author': 'Michael R., Food Critic'
}
]),
'meta_title': 'Fine Dining Experience - Michelin-Starred Restaurant',
'meta_description': 'Savor culinary excellence at our Michelin-starred restaurants. World-renowned chefs, exquisite dishes, and exceptional service.',
'meta_keywords': 'fine dining, michelin star, luxury restaurant, gourmet cuisine, fine dining hotel',
'is_active': True
},
{
'name': '24/7 Premium Room Service',
'description': 'Enjoy the convenience of round-the-clock in-room dining with our extensive menu featuring international cuisine and premium beverages.',
'price': 35.00,
'category': 'Dining',
'slug': 'premium-room-service',
'image': 'https://images.unsplash.com/photo-1556911220-bff31c812dba?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Dining at Your Convenience</h2>
<p>Experience the ultimate in-room dining service available 24 hours a day. From breakfast in bed to late-night snacks, our extensive menu caters to every craving with the highest standards of quality and presentation.</p>
<h3>Menu Highlights</h3>
<ul>
<li><strong>Breakfast:</strong> Continental, American, and healthy options</li>
<li><strong>Lunch & Dinner:</strong> International cuisine, local specialties, and chef's recommendations</li>
<li><strong>Desserts:</strong> Artisanal pastries and premium ice creams</li>
<li><strong>Beverages:</strong> Premium wines, craft cocktails, and specialty coffees</li>
</ul>
<h3>Service Features</h3>
<ul>
<li>Average delivery time: 25-30 minutes</li>
<li>Professional table setup in your room</li>
<li>Hot meals served at optimal temperature</li>
<li>Special dietary accommodations available</li>
<li>Complimentary bread and butter service</li>
</ul>
<h3>How to Order</h3>
<p>Simply call our room service line from your in-room phone or use our mobile app. Our team is available 24/7 to take your order and ensure prompt delivery.</p>
</div>''',
'sections': json.dumps([
{
'type': 'features',
'title': 'Why Choose Our Room Service',
'features': [
{'title': '24/7 Availability', 'description': 'Order anytime, day or night', 'icon': 'Clock'},
{'title': 'Fast Delivery', 'description': 'Average 25-30 minute delivery time', 'icon': 'Zap'},
{'title': 'Premium Quality', 'description': 'Restaurant-quality meals in your room', 'icon': 'Award'},
{'title': 'Professional Service', 'description': 'Elegant table setup and presentation', 'icon': 'UserCheck'}
]
}
]),
'meta_title': '24/7 Premium Room Service - Luxury Hotel',
'meta_description': 'Enjoy round-the-clock in-room dining with our extensive menu. International cuisine, premium beverages, and professional service delivered to your room.',
'meta_keywords': 'room service, in-room dining, 24/7 service, hotel dining, room service menu',
'is_active': True
},
{
'name': 'Executive Business Center',
'description': 'Fully equipped business center with private meeting rooms, high-speed internet, printing services, and professional secretarial support.',
'price': 75.00,
'category': 'Business',
'slug': 'executive-business-center',
'image': 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Your Office Away From Office</h2>
<p>Stay productive with our state-of-the-art Executive Business Center, designed to meet all your professional needs. Whether you need a quiet workspace, a meeting room, or professional support services, we have everything you need.</p>
<h3>Facilities & Services</h3>
<ul>
<li><strong>Private Meeting Rooms:</strong> Various sizes accommodating 2-20 people</li>
<li><strong>High-Speed Internet:</strong> Fiber-optic connection with secure Wi-Fi</li>
<li><strong>Printing & Copying:</strong> Color and black & white printing, scanning, and binding</li>
<li><strong>Presentation Equipment:</strong> Projectors, screens, video conferencing</li>
<li><strong>Secretarial Services:</strong> Typing, translation, and administrative support</li>
<li><strong>Refreshments:</strong> Complimentary coffee, tea, and water</li>
</ul>
<h3>Meeting Room Features</h3>
<ul>
<li>Soundproof walls for privacy</li>
<li>Ergonomic seating and modern furniture</li>
<li>Whiteboards and flip charts</li>
<li>Video conferencing capabilities</li>
<li>Climate control and natural lighting</li>
</ul>
<h3>Reservation</h3>
<p>Meeting rooms can be reserved in advance through our concierge or business center. Hourly and daily rates available. Special packages for extended stays.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Productivity Meets Luxury',
'content': 'A professional workspace designed for success, equipped with everything you need to stay productive.',
'image': 'https://images.unsplash.com/photo-1497366216548-37526070297c?w=1200&h=600&fit=crop'
},
{
'type': 'features',
'title': 'Everything You Need',
'features': [
{'title': 'Private Meeting Rooms', 'description': 'Various sizes for any business need', 'icon': 'Users'},
{'title': 'High-Speed Internet', 'description': 'Fiber-optic connection with secure Wi-Fi', 'icon': 'Wifi'},
{'title': 'Professional Support', 'description': 'Secretarial and administrative services', 'icon': 'Briefcase'},
{'title': 'Modern Equipment', 'description': 'Latest technology and presentation tools', 'icon': 'Monitor'}
]
}
]),
'meta_title': 'Executive Business Center - Professional Workspace',
'meta_description': 'Fully equipped business center with meeting rooms, high-speed internet, printing services, and professional support. Your office away from office.',
'meta_keywords': 'business center, meeting room, conference room, office services, hotel business center',
'is_active': True
},
{
'name': 'Luxury Airport Transfer',
'description': 'Travel in comfort and style with our premium airport transfer service. Luxury vehicles, professional drivers, and flight monitoring for a seamless journey.',
'price': 85.00,
'category': 'Transportation',
'slug': 'luxury-airport-transfer',
'image': 'https://images.unsplash.com/photo-1449824913935-59a10b8d2000?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Arrive in Style</h2>
<p>Begin or end your journey with our premium airport transfer service. Our fleet of luxury vehicles and professional drivers ensure a comfortable, punctual, and stress-free experience.</p>
<h3>Our Fleet</h3>
<ul>
<li><strong>Luxury Sedans:</strong> Premium sedans for up to 3 passengers</li>
<li><strong>Executive SUVs:</strong> Spacious SUVs for up to 6 passengers</li>
<li><strong>Luxury Vans:</strong> Large vehicles for groups up to 8 passengers</li>
<li><strong>VIP Limousines:</strong> Ultimate luxury for special occasions</li>
</ul>
<h3>Service Features</h3>
<ul>
<li>Flight monitoring for delays and early arrivals</li>
<li>Meet & greet service at the airport</li>
<li>Complimentary bottled water and newspapers</li>
<li>Luggage assistance</li>
<li>Wi-Fi connectivity in vehicles</li>
<li>Professional, licensed, and insured drivers</li>
</ul>
<h3>Booking Information</h3>
<p>Reservations should be made at least 24 hours in advance. Please provide flight details for arrival transfers. Our team monitors flights and adjusts pickup times accordingly.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Your Journey Starts Here',
'content': 'Experience the comfort and convenience of premium airport transfers.',
'image': 'https://images.unsplash.com/photo-1449824913935-59a10b8d2000?w=1200&h=600&fit=crop'
},
{
'type': 'features',
'title': 'Why Choose Our Transfer Service',
'features': [
{'title': 'Luxury Fleet', 'description': 'Premium vehicles for every need', 'icon': 'Car'},
{'title': 'Professional Drivers', 'description': 'Licensed, experienced, and courteous', 'icon': 'User'},
{'title': 'Flight Monitoring', 'description': 'Automatic updates for delays', 'icon': 'Plane'},
{'title': 'Complimentary Amenities', 'description': 'Water, Wi-Fi, and newspapers', 'icon': 'Gift'}
]
}
]),
'meta_title': 'Luxury Airport Transfer - Premium Transportation',
'meta_description': 'Travel in comfort with our premium airport transfer service. Luxury vehicles, professional drivers, and flight monitoring for a seamless journey.',
'meta_keywords': 'airport transfer, luxury transportation, airport shuttle, hotel transfer, airport service',
'is_active': True
},
{
'name': 'Personal Concierge Service',
'description': 'Dedicated 24/7 concierge assistance for restaurant reservations, event tickets, tours, transportation, and all your special requests.',
'price': 0.00,
'category': 'Concierge',
'slug': 'personal-concierge-service',
'image': 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Your Personal Assistant</h2>
<p>Our dedicated concierge team is available 24/7 to ensure your stay is nothing short of extraordinary. From restaurant reservations and event tickets to private tours and unique experiences, we handle every detail with precision and care.</p>
<h3>Services We Provide</h3>
<ul>
<li><strong>Dining:</strong> Restaurant reservations at the finest establishments</li>
<li><strong>Entertainment:</strong> Theater tickets, concerts, and event access</li>
<li><strong>Tours & Activities:</strong> Private tours, cultural experiences, and adventure activities</li>
<li><strong>Transportation:</strong> Car rentals, chauffeur services, and travel arrangements</li>
<li><strong>Business Services:</strong> Meeting room bookings, translation services, and more</li>
<li><strong>Special Requests:</strong> Gift arrangements, celebrations, and unique experiences</li>
</ul>
<h3>How We Can Help</h3>
<p>Whether you need last-minute reservations at a popular restaurant, tickets to a sold-out show, or help planning a special celebration, our concierge team has the expertise and connections to make it happen. No request is too big or too small.</p>
<h3>Contact Us</h3>
<p>Reach our concierge team 24/7 via phone, email, or in-person at the concierge desk. We're here to make your stay unforgettable.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Making Your Dreams Come True',
'content': 'Your personal assistant, available 24/7 to fulfill every request.',
'image': 'https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=1200&h=600&fit=crop'
},
{
'type': 'cta',
'title': 'Need Assistance?',
'cta_text': 'Contact Our Concierge',
'cta_link': '/contact',
'content': 'Our team is standing by to help with any request, big or small.'
}
]),
'meta_title': 'Personal Concierge Service - 24/7 Assistance',
'meta_description': 'Dedicated 24/7 concierge service for restaurant reservations, event tickets, tours, and all your special requests. Making your stay extraordinary.',
'meta_keywords': 'concierge service, personal assistant, hotel concierge, travel services, luxury service',
'is_active': True
},
{
'name': 'State-of-the-Art Fitness Center',
'description': 'Access our fully equipped fitness center with modern equipment, personal training options, and group fitness classes. Open 24/7 for your convenience.',
'price': 30.00,
'category': 'Wellness',
'slug': 'fitness-center-access',
'image': 'https://images.unsplash.com/photo-1534438327276-14e5300c3a48?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Stay Fit, Stay Strong</h2>
<p>Maintain your fitness routine at our state-of-the-art fitness center featuring the latest cardio and strength training equipment. Our facilities are designed to meet the needs of both casual exercisers and serious athletes.</p>
<h3>Equipment & Facilities</h3>
<ul>
<li><strong>Cardio Equipment:</strong> Treadmills, ellipticals, stationary bikes, and rowing machines</li>
<li><strong>Strength Training:</strong> Free weights, weight machines, and functional training equipment</li>
<li><strong>Group Fitness Studio:</strong> Space for yoga, Pilates, and group classes</li>
<li><strong>Locker Rooms:</strong> Spacious lockers, showers, and sauna access</li>
<li><strong>Complimentary Amenities:</strong> Towels, water, fresh fruit, and protein bars</li>
</ul>
<h3>Additional Services</h3>
<ul>
<li><strong>Personal Training:</strong> One-on-one sessions with certified trainers</li>
<li><strong>Group Classes:</strong> Yoga, Pilates, spinning, and HIIT classes</li>
<li><strong>Fitness Assessments:</strong> Body composition analysis and fitness evaluations</li>
<li><strong>Nutritional Guidance:</strong> Consultation with our wellness experts</li>
</ul>
<h3>Operating Hours</h3>
<p>Our fitness center is open 24/7 for your convenience. Personal training and group classes are available by appointment. Check the schedule at the front desk or contact our fitness team.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Your Fitness Journey Continues',
'content': 'World-class equipment and expert guidance to help you achieve your fitness goals.',
'image': 'https://images.unsplash.com/photo-1534438327276-14e5300c3a48?w=1200&h=600&fit=crop'
},
{
'type': 'features',
'title': 'Why Our Fitness Center',
'features': [
{'title': '24/7 Access', 'description': 'Work out on your schedule', 'icon': 'Clock'},
{'title': 'Modern Equipment', 'description': 'Latest cardio and strength training machines', 'icon': 'Activity'},
{'title': 'Expert Trainers', 'description': 'Certified personal trainers available', 'icon': 'User'},
{'title': 'Group Classes', 'description': 'Yoga, Pilates, and more', 'icon': 'Users'}
]
}
]),
'meta_title': 'State-of-the-Art Fitness Center - 24/7 Access',
'meta_description': 'Fully equipped fitness center with modern equipment, personal training, and group classes. Open 24/7 for your convenience.',
'meta_keywords': 'fitness center, gym, hotel gym, workout, exercise, personal training, 24/7 gym',
'is_active': True
},
{
'name': 'Premium Laundry & Dry Cleaning',
'description': 'Professional laundry and dry cleaning service with same-day express or next-day standard delivery. Expert care for all your garments.',
'price': 20.00,
'category': 'Housekeeping',
'slug': 'premium-laundry-dry-cleaning',
'image': 'https://images.unsplash.com/photo-1582735689369-4fe89db7114c?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Expert Garment Care</h2>
<p>Keep your wardrobe fresh and impeccably maintained with our professional laundry and dry cleaning service. We handle everything from delicate silk garments to business suits with the utmost care and attention to detail.</p>
<h3>Our Services</h3>
<ul>
<li><strong>Dry Cleaning:</strong> Professional cleaning for suits, dresses, and delicate fabrics</li>
<li><strong>Laundry Service:</strong> Washing, drying, and pressing for everyday garments</li>
<li><strong>Pressing Only:</strong> Professional pressing and steaming services</li>
<li><strong>Alterations:</strong> Minor repairs and adjustments available</li>
<li><strong>Specialty Items:</strong> Wedding dresses, formal wear, and designer garments</li>
</ul>
<h3>Delivery Options</h3>
<ul>
<li><strong>Express Service:</strong> Same-day delivery (orders before 9 AM)</li>
<li><strong>Standard Service:</strong> Next-day delivery</li>
<li><strong>Bulk Service:</strong> Special rates for multiple items</li>
</ul>
<h3>How to Use</h3>
<p>Simply place your items in the laundry bag provided in your room and call housekeeping. Our team will collect your items, process them with care, and return them to your room at the specified time.</p>
</div>''',
'sections': json.dumps([
{
'type': 'features',
'title': 'Why Choose Our Service',
'features': [
{'title': 'Expert Care', 'description': 'Professional handling of all garment types', 'icon': 'Shield'},
{'title': 'Fast Service', 'description': 'Same-day express option available', 'icon': 'Zap'},
{'title': 'Quality Guarantee', 'description': 'Satisfaction guaranteed on all services', 'icon': 'CheckCircle'},
{'title': 'Eco-Friendly', 'description': 'Environmentally conscious cleaning methods', 'icon': 'Leaf'}
]
}
]),
'meta_title': 'Premium Laundry & Dry Cleaning - Professional Service',
'meta_description': 'Professional laundry and dry cleaning with same-day or next-day delivery. Expert care for all your garments.',
'meta_keywords': 'laundry service, dry cleaning, hotel laundry, garment care, cleaning service',
'is_active': True
},
{
'name': 'Valet Parking Service',
'description': 'Secure valet parking with 24/7 vehicle care, quick retrieval, and optional car wash services. Your vehicle is in safe hands.',
'price': 45.00,
'category': 'Transportation',
'slug': 'valet-parking-service',
'image': 'https://images.unsplash.com/photo-1502877338535-766e1452684a?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Secure & Convenient Parking</h2>
<p>Enjoy the ultimate convenience of valet parking with our professional service. Your vehicle will be safely parked and secured, ready for quick retrieval whenever you need it. Our valet team is available 24/7 to assist you.</p>
<h3>Service Features</h3>
<ul>
<li>Secure, monitored parking facility</li>
<li>24/7 valet service availability</li>
<li>Quick vehicle retrieval (average 5 minutes)</li>
<li>Complimentary vehicle inspection</li>
<li>Luggage assistance included</li>
<li>Optional car wash and detailing services</li>
</ul>
<h3>Additional Services</h3>
<ul>
<li><strong>Car Wash:</strong> Exterior wash and interior vacuum</li>
<li><strong>Detailing:</strong> Full interior and exterior detailing</li>
<li><strong>Battery Jump Start:</strong> Assistance with vehicle issues</li>
<li><strong>Tire Pressure Check:</strong> Complimentary tire service</li>
</ul>
<h3>Pricing</h3>
<p>Daily rates available for extended stays. Weekly and monthly packages offer significant savings. Contact our valet team for special rates.</p>
</div>''',
'sections': json.dumps([
{
'type': 'features',
'title': 'Why Choose Our Valet Service',
'features': [
{'title': 'Secure Facility', 'description': 'Monitored and protected parking', 'icon': 'Shield'},
{'title': 'Quick Service', 'description': 'Average 5-minute retrieval time', 'icon': 'Clock'},
{'title': '24/7 Availability', 'description': 'Service available around the clock', 'icon': 'Sun'},
{'title': 'Additional Services', 'description': 'Car wash and detailing available', 'icon': 'Sparkles'}
]
}
]),
'meta_title': 'Valet Parking Service - Secure & Convenient',
'meta_description': 'Secure valet parking with 24/7 service, quick retrieval, and optional car care services. Your vehicle is in safe hands.',
'meta_keywords': 'valet parking, parking service, hotel parking, car service, valet',
'is_active': True
},
{
'name': 'Professional Babysitting Service',
'description': 'Certified and experienced babysitters available for in-room care and supervised activities. Background-checked professionals for your peace of mind.',
'price': 35.00,
'category': 'Family',
'slug': 'professional-babysitting-service',
'image': 'https://images.unsplash.com/photo-1503454537195-1dcabb73ffb9?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Your Children in Safe Hands</h2>
<p>Enjoy your time knowing your children are in the care of our professional babysitting service. Our certified caregivers are experienced, background-checked, and trained in child safety and first aid.</p>
<h3>Our Caregivers</h3>
<ul>
<li>Certified in CPR and first aid</li>
<li>Background-checked and verified</li>
<li>Experienced with children of all ages</li>
<li>Multilingual capabilities available</li>
<li>References available upon request</li>
</ul>
<h3>Services Offered</h3>
<ul>
<li><strong>In-Room Care:</strong> Supervised care in your hotel room</li>
<li><strong>Activity Supervision:</strong> Accompany children to hotel activities</li>
<li><strong>Evening Care:</strong> Bedtime routines and overnight care</li>
<li><strong>Group Care:</strong> Multiple children from the same family</li>
</ul>
<h3>Booking Information</h3>
<p>Reservations should be made at least 4 hours in advance. Same-day service may be available subject to caregiver availability. Minimum booking: 2 hours.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Peace of Mind for Parents',
'content': 'Certified professionals ensuring your children are safe, happy, and well-cared for.',
'image': 'https://images.unsplash.com/photo-1503454537195-1dcabb73ffb9?w=1200&h=600&fit=crop'
},
{
'type': 'features',
'title': 'Why Parents Trust Us',
'features': [
{'title': 'Certified Caregivers', 'description': 'CPR and first aid certified', 'icon': 'Shield'},
{'title': 'Background Checked', 'description': 'Thoroughly vetted professionals', 'icon': 'UserCheck'},
{'title': 'Experienced', 'description': 'Years of childcare experience', 'icon': 'Heart'},
{'title': 'Flexible Service', 'description': 'In-room or activity supervision', 'icon': 'Clock'}
]
}
]),
'meta_title': 'Professional Babysitting Service - Certified Caregivers',
'meta_description': 'Certified and experienced babysitters for in-room care and supervised activities. Background-checked professionals for your peace of mind.',
'meta_keywords': 'babysitting service, childcare, hotel babysitting, kids care, family services',
'is_active': True
},
{
'name': 'Pet Care & Accommodation',
'description': 'Pet-friendly accommodations with professional pet care services including walking, feeding, grooming, and pet-sitting. Your furry friends are welcome!',
'price': 25.00,
'category': 'Pet Services',
'slug': 'pet-care-accommodation',
'image': 'https://images.unsplash.com/photo-1601758228041-f3b2795255f1?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Your Pets Are Family Too</h2>
<p>We welcome your furry family members! Our pet-friendly accommodations and professional pet care services ensure your pets are as comfortable and well-cared for as you are during your stay.</p>
<h3>Pet Amenities</h3>
<ul>
<li>Comfortable pet beds and blankets</li>
<li>Food and water bowls</li>
<li>Complimentary treats and toys</li>
<li>Pet waste bags and disposal</li>
<li>Designated pet relief areas</li>
</ul>
<h3>Pet Care Services</h3>
<ul>
<li><strong>Dog Walking:</strong> Regular walks and exercise</li>
<li><strong>Pet Sitting:</strong> In-room care while you're away</li>
<li><strong>Feeding Service:</strong> Scheduled feeding times</li>
<li><strong>Grooming:</strong> Basic grooming and bathing</li>
<li><strong>Veterinary Referrals:</strong> Local vet recommendations</li>
</ul>
<h3>Pet Policy</h3>
<p>Pets up to 50 lbs are welcome. A pet fee applies per night. Please inform us in advance about your pet's stay. We ask that pets be leashed in public areas and that owners clean up after their pets.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'A Home Away From Home for Your Pets',
'content': 'Because your pets deserve the same luxury experience as you.',
'image': 'https://images.unsplash.com/photo-1601758228041-f3b2795255f1?w=1200&h=600&fit=crop'
},
{
'type': 'features',
'title': 'Pet-Friendly Features',
'features': [
{'title': 'Pet Amenities', 'description': 'Beds, bowls, treats, and toys provided', 'icon': 'Heart'},
{'title': 'Professional Care', 'description': 'Walking, feeding, and grooming services', 'icon': 'User'},
{'title': 'Designated Areas', 'description': 'Pet relief areas and walking paths', 'icon': 'MapPin'},
{'title': 'Vet Referrals', 'description': 'Local veterinary recommendations', 'icon': 'Stethoscope'}
]
}
]),
'meta_title': 'Pet Care & Accommodation - Pet-Friendly Hotel',
'meta_description': 'Pet-friendly accommodations with professional pet care services. Walking, feeding, grooming, and pet-sitting available. Your pets are welcome!',
'meta_keywords': 'pet care, pet friendly hotel, dog walking, pet services, pet accommodation',
'is_active': True
},
{
'name': 'Premium Wine & Spirits Collection',
'description': 'Extensive collection of fine wines, premium spirits, and craft cocktails. Expert sommelier service and private wine tastings available.',
'price': 0.00,
'category': 'Dining',
'slug': 'premium-wine-spirits-collection',
'image': 'https://images.unsplash.com/photo-1514362545857-3bc16c4c7d1b?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Curated Excellence</h2>
<p>Discover our extensive collection of fine wines, premium spirits, and artisanal cocktails. Our master sommelier has curated a selection that spans the globe, featuring rare vintages, limited editions, and exceptional spirits.</p>
<h3>Our Collection</h3>
<ul>
<li><strong>Fine Wines:</strong> Over 500 labels from renowned vineyards worldwide</li>
<li><strong>Premium Spirits:</strong> Rare whiskeys, cognacs, and artisanal spirits</li>
<li><strong>Craft Cocktails:</strong> Signature cocktails created by our expert mixologists</li>
<li><strong>Champagne & Sparkling:</strong> Exclusive selection of premium bubbles</li>
</ul>
<h3>Services</h3>
<ul>
<li><strong>Sommelier Service:</strong> Expert wine recommendations and pairings</li>
<li><strong>Wine Tastings:</strong> Private tastings and educational sessions</li>
<li><strong>Bar Service:</strong> Craft cocktails at our premium bars</li>
<li><strong>Private Events:</strong> Wine dinners and tasting events</li>
</ul>
<h3>Locations</h3>
<p>Enjoy our collection at our signature bars, restaurants, or through our room service. Our sommelier is available for consultations and recommendations.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'A World of Flavors',
'content': 'Curated by experts, enjoyed by connoisseurs.',
'image': 'https://images.unsplash.com/photo-1514362545857-3bc16c4c7d1b?w=1200&h=600&fit=crop'
},
{
'type': 'quote',
'quote': 'An exceptional collection that rivals the finest establishments in the world.',
'author': 'Wine Enthusiast Magazine'
}
]),
'meta_title': 'Premium Wine & Spirits Collection - Fine Beverages',
'meta_description': 'Extensive collection of fine wines, premium spirits, and craft cocktails. Expert sommelier service and private tastings available.',
'meta_keywords': 'wine collection, premium spirits, sommelier, wine tasting, luxury bar, craft cocktails',
'is_active': True
},
{
'name': 'Private Event & Catering Services',
'description': 'Professional event planning and catering services for weddings, corporate events, celebrations, and private gatherings. Make your special occasion unforgettable.',
'price': 0.00,
'category': 'Entertainment',
'slug': 'private-event-catering-services',
'image': 'https://images.unsplash.com/photo-1519167758481-83f550bb49b3?w=1200&h=800&fit=crop',
'content': '''<div class="service-detail-content">
<h2>Unforgettable Events</h2>
<p>From intimate gatherings to grand celebrations, our professional event planning and catering team will ensure your special occasion is executed flawlessly. We handle every detail so you can enjoy your event.</p>
<h3>Event Types</h3>
<ul>
<li><strong>Weddings:</strong> Ceremonies, receptions, and rehearsal dinners</li>
<li><strong>Corporate Events:</strong> Conferences, meetings, and team building</li>
<li><strong>Celebrations:</strong> Birthdays, anniversaries, and milestones</li>
<li><strong>Private Dinners:</strong> Intimate gatherings and special occasions</li>
</ul>
<h3>Our Services</h3>
<ul>
<li>Complete event planning and coordination</li>
<li>Customized menu design and catering</li>
<li>Venue selection and setup</li>
<li>Floral arrangements and decorations</li>
<li>Entertainment coordination</li>
<li>Photography and videography services</li>
<li>Technical support and AV equipment</li>
</ul>
<h3>Planning Process</h3>
<p>Our event specialists will work with you from initial consultation through event execution. We offer flexible packages and can customize services to meet your specific needs and budget.</p>
</div>''',
'sections': json.dumps([
{
'type': 'hero',
'title': 'Making Memories That Last',
'content': 'Professional event planning and catering for your most important occasions.',
'image': 'https://images.unsplash.com/photo-1519167758481-83f550bb49b3?w=1200&h=600&fit=crop'
},
{
'type': 'cta',
'title': 'Planning an Event?',
'cta_text': 'Contact Our Event Team',
'cta_link': '/contact',
'content': 'Let us help you create an unforgettable experience.'
}
]),
'meta_title': 'Private Event & Catering Services - Professional Planning',
'meta_description': 'Professional event planning and catering for weddings, corporate events, and celebrations. Make your special occasion unforgettable.',
'meta_keywords': 'event planning, catering, wedding planning, corporate events, private events, hotel events',
'is_active': True
}
]
created_count = 0
updated_count = 0
for service_data in services_data:
# Check if service already exists by slug
existing = db.query(Service).filter(Service.slug == service_data['slug']).first()
if existing:
# Update existing service
for key, value in service_data.items():
if key != 'slug': # Don't update slug
setattr(existing, key, value)
updated_count += 1
print(f' ✓ Updated service: {service_data["name"]}')
else:
# Create new service
service = Service(**service_data)
db.add(service)
created_count += 1
print(f' ✓ Created service: {service_data["name"]}')
db.commit()
print(f'\n✓ Enterprise services seeded successfully!')
print(f' - Created: {created_count}')
print(f' - Updated: {updated_count}')
print(f' - Total: {len(services_data)}\n')
def main():
db: Session = SessionLocal()
try:
print('=' * 80)
print('SEEDING ENTERPRISE SERVICES')
print('=' * 80)
print()
seed_enterprise_services(db)
print('=' * 80)
print('✓ All enterprise services data seeded successfully!')
print('=' * 80)
except Exception as e:
db.rollback()
print(f'\n✗ Error seeding services: {e}')
import traceback
traceback.print_exc()
raise
finally:
db.close()
if __name__ == '__main__':
main()

View File

@@ -1,4 +1,4 @@
from sqlalchemy import Column, Integer, String, Numeric, Boolean, Text, DateTime
from sqlalchemy import Column, Integer, String, Numeric, Boolean, Text, DateTime, Index
from sqlalchemy.orm import relationship
from datetime import datetime
from ...shared.config.database import Base
@@ -10,6 +10,13 @@ class Service(Base):
description = Column(Text, nullable=True)
price = Column(Numeric(10, 2), nullable=False)
category = Column(String(50), nullable=True)
slug = Column(String(200), nullable=True, unique=True, index=True)
image = Column(String(1000), nullable=True)
content = Column(Text, nullable=True)
sections = Column(Text, nullable=True) # JSON string for advanced content blocks
meta_title = Column(String(500), nullable=True)
meta_description = Column(Text, nullable=True)
meta_keywords = Column(String(1000), nullable=True)
is_active = Column(Boolean, nullable=False, default=True)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)

View File

@@ -24,7 +24,24 @@ async def get_services(search: Optional[str]=Query(None), status_filter: Optiona
services = query.order_by(Service.created_at.desc()).offset(offset).limit(limit).all()
result = []
for service in services:
service_dict = {'id': service.id, 'name': service.name, 'description': service.description, 'price': float(service.price) if service.price else 0.0, 'category': service.category, 'is_active': service.is_active, 'created_at': service.created_at.isoformat() if service.created_at else None}
service_dict = {
'id': service.id,
'name': service.name,
'description': service.description,
'price': float(service.price) if service.price else 0.0,
'category': service.category,
'slug': service.slug,
'image': service.image,
'content': service.content,
'sections': service.sections,
'meta_title': service.meta_title,
'meta_description': service.meta_description,
'meta_keywords': service.meta_keywords,
'is_active': service.is_active,
'status': 'active' if service.is_active else 'inactive',
'unit': service.category, # For backward compatibility
'created_at': service.created_at.isoformat() if service.created_at else None
}
result.append(service_dict)
return {'status': 'success', 'data': {'services': result, 'pagination': {'total': total, 'page': page, 'limit': limit, 'totalPages': (total + limit - 1) // limit}}}
except Exception as e:
@@ -36,7 +53,54 @@ async def get_service_by_id(id: int, db: Session=Depends(get_db)):
service = db.query(Service).filter(Service.id == id).first()
if not service:
raise HTTPException(status_code=404, detail='Service not found')
service_dict = {'id': service.id, 'name': service.name, 'description': service.description, 'price': float(service.price) if service.price else 0.0, 'category': service.category, 'is_active': service.is_active, 'created_at': service.created_at.isoformat() if service.created_at else None}
service_dict = {
'id': service.id,
'name': service.name,
'description': service.description,
'price': float(service.price) if service.price else 0.0,
'category': service.category,
'slug': service.slug,
'image': service.image,
'content': service.content,
'sections': service.sections,
'meta_title': service.meta_title,
'meta_description': service.meta_description,
'meta_keywords': service.meta_keywords,
'is_active': service.is_active,
'status': 'active' if service.is_active else 'inactive',
'unit': service.category, # For backward compatibility
'created_at': service.created_at.isoformat() if service.created_at else None
}
return {'status': 'success', 'data': {'service': service_dict}}
except HTTPException:
raise
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.get('/slug/{slug}')
async def get_service_by_slug(slug: str, db: Session=Depends(get_db)):
try:
service = db.query(Service).filter(Service.slug == slug, Service.is_active == True).first()
if not service:
raise HTTPException(status_code=404, detail='Service not found')
service_dict = {
'id': service.id,
'name': service.name,
'description': service.description,
'price': float(service.price) if service.price else 0.0,
'category': service.category,
'slug': service.slug,
'image': service.image,
'content': service.content,
'sections': service.sections,
'meta_title': service.meta_title,
'meta_description': service.meta_description,
'meta_keywords': service.meta_keywords,
'is_active': service.is_active,
'status': 'active' if service.is_active else 'inactive',
'unit': service.category, # For backward compatibility
'created_at': service.created_at.isoformat() if service.created_at else None
}
return {'status': 'success', 'data': {'service': service_dict}}
except HTTPException:
raise
@@ -50,7 +114,39 @@ async def create_service(service_data: dict, current_user: User=Depends(authoriz
existing = db.query(Service).filter(Service.name == name).first()
if existing:
raise HTTPException(status_code=400, detail='Service name already exists')
service = Service(name=name, description=service_data.get('description'), price=float(service_data.get('price', 0)), category=service_data.get('category'), is_active=service_data.get('status') == 'active' if service_data.get('status') else True)
# Generate slug from name if not provided
slug = service_data.get('slug')
if not slug and name:
import re
slug = re.sub(r'[^a-z0-9-]', '', name.lower().replace(' ', '-'))
# Ensure slug is unique
counter = 1
original_slug = slug
while db.query(Service).filter(Service.slug == slug).first():
slug = f"{original_slug}-{counter}"
counter += 1
# Handle sections as JSON string
sections = service_data.get('sections')
if sections and isinstance(sections, (list, dict)):
import json
sections = json.dumps(sections)
service = Service(
name=name,
description=service_data.get('description'),
price=float(service_data.get('price', 0)),
category=service_data.get('category'),
slug=slug,
image=service_data.get('image'),
content=service_data.get('content'),
sections=sections,
meta_title=service_data.get('meta_title'),
meta_description=service_data.get('meta_description'),
meta_keywords=service_data.get('meta_keywords'),
is_active=service_data.get('status') == 'active' if service_data.get('status') else True
)
db.add(service)
db.commit()
db.refresh(service)
@@ -72,6 +168,14 @@ async def update_service(id: int, service_data: dict, current_user: User=Depends
existing = db.query(Service).filter(Service.name == name, Service.id != id).first()
if existing:
raise HTTPException(status_code=400, detail='Service name already exists')
# Check slug uniqueness if provided
slug = service_data.get('slug')
if slug and slug != service.slug:
existing = db.query(Service).filter(Service.slug == slug, Service.id != id).first()
if existing:
raise HTTPException(status_code=400, detail='Service slug already exists')
if 'name' in service_data:
service.name = service_data['name']
if 'description' in service_data:
@@ -80,6 +184,25 @@ async def update_service(id: int, service_data: dict, current_user: User=Depends
service.price = float(service_data['price'])
if 'category' in service_data:
service.category = service_data['category']
if 'slug' in service_data:
service.slug = service_data['slug']
if 'image' in service_data:
service.image = service_data['image']
if 'content' in service_data:
service.content = service_data['content']
if 'sections' in service_data:
sections = service_data['sections']
if sections and isinstance(sections, (list, dict)):
import json
service.sections = json.dumps(sections)
else:
service.sections = sections
if 'meta_title' in service_data:
service.meta_title = service_data['meta_title']
if 'meta_description' in service_data:
service.meta_description = service_data['meta_description']
if 'meta_keywords' in service_data:
service.meta_keywords = service_data['meta_keywords']
if 'status' in service_data:
service.is_active = service_data['status'] == 'active'
db.commit()