Files
Hotel-Booking/Backend/seed_banners_company.py
Iliyan Angelov a38ab4fa82 updates
2025-11-20 21:06:30 +02:00

215 lines
7.7 KiB
Python

"""
Seed script to populate banners and company information with sample data.
Run this script to add default banners and company settings.
"""
import sys
import os
from datetime import datetime, timedelta
# Add the src directory to the path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from sqlalchemy.orm import Session
from src.config.database import SessionLocal
from src.models.banner import Banner
from src.models.system_settings import SystemSettings
from src.models.user import User
def seed_banners(db: Session):
"""Seed sample banners"""
print("Seeding banners...")
# Get admin user for updated_by_id (if exists)
admin_user = db.query(User).filter(User.email == "admin@hotel.com").first()
admin_id = admin_user.id if admin_user else None
# Delete all existing banners
existing_banners = db.query(Banner).all()
if existing_banners:
for banner in existing_banners:
db.delete(banner)
db.commit()
print(f" ✓ Removed {len(existing_banners)} existing banner(s)")
# New luxury banners with premium content
banners_data = [
{
"title": "Welcome to Unparalleled Luxury",
"description": "Where timeless elegance meets modern sophistication. Experience the pinnacle of hospitality in our award-winning luxury hotel.",
"image_url": "https://images.unsplash.com/photo-1564501049412-61c2a3083791?w=1920",
"link_url": "/rooms",
"position": "home",
"display_order": 1,
"is_active": True,
"start_date": datetime.utcnow() - timedelta(days=30),
"end_date": datetime.utcnow() + timedelta(days=365),
},
{
"title": "Exclusive Presidential Suites",
"description": "Indulge in our most opulent accommodations. Spacious suites with panoramic views, private terraces, and personalized butler service.",
"image_url": "https://images.unsplash.com/photo-1590490360182-c33d57733427?w=1920",
"link_url": "/rooms",
"position": "home",
"display_order": 2,
"is_active": True,
"start_date": datetime.utcnow() - timedelta(days=7),
"end_date": datetime.utcnow() + timedelta(days=365),
},
{
"title": "World-Class Spa & Wellness",
"description": "Rejuvenate your mind, body, and soul. Our award-winning spa offers bespoke treatments using the finest luxury products.",
"image_url": "https://images.unsplash.com/photo-1544161515-4ab6ce6db874?w=1920",
"link_url": "/services",
"position": "home",
"display_order": 3,
"is_active": True,
"start_date": datetime.utcnow() - timedelta(days=1),
"end_date": datetime.utcnow() + timedelta(days=365),
},
{
"title": "Michelin-Starred Culinary Excellence",
"description": "Savor extraordinary flavors crafted by world-renowned chefs. Our fine dining restaurants offer an unforgettable gastronomic journey.",
"image_url": "https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=1920",
"link_url": "/services",
"position": "home",
"display_order": 4,
"is_active": True,
"start_date": datetime.utcnow(),
"end_date": datetime.utcnow() + timedelta(days=365),
},
{
"title": "Private Yacht & Exclusive Experiences",
"description": "Create unforgettable memories with our curated luxury experiences. From private yacht charters to exclusive cultural tours.",
"image_url": "https://images.unsplash.com/photo-1544551763-46a013bb70d5?w=1920",
"link_url": "/services",
"position": "home",
"display_order": 5,
"is_active": True,
"start_date": datetime.utcnow() - timedelta(days=15),
"end_date": datetime.utcnow() + timedelta(days=365),
}
]
for banner_data in banners_data:
# Create new banner
new_banner = Banner(**banner_data)
db.add(new_banner)
print(f" ✓ Created banner: {banner_data['title']}")
db.commit()
print("✓ Banners seeded successfully!\n")
def seed_company_info(db: Session):
"""Seed company information"""
print("Seeding company information...")
# Get admin user for updated_by_id (if exists)
admin_user = db.query(User).filter(User.email == "admin@hotel.com").first()
admin_id = admin_user.id if admin_user else None
# Company settings
company_settings = [
{
"key": "company_name",
"value": "Luxury Hotel",
"description": "Company name displayed throughout the application"
},
{
"key": "company_tagline",
"value": "Experience Unparalleled Elegance",
"description": "Company tagline or slogan"
},
{
"key": "company_logo_url",
"value": "",
"description": "URL to company logo image (upload via admin dashboard)"
},
{
"key": "company_favicon_url",
"value": "",
"description": "URL to company favicon image (upload via admin dashboard)"
},
{
"key": "company_phone",
"value": "+1 (555) 123-4567",
"description": "Company contact phone number"
},
{
"key": "company_email",
"value": "info@luxuryhotel.com",
"description": "Company contact email address"
},
{
"key": "company_address",
"value": "123 Luxury Avenue, Premium District, City 12345, Country",
"description": "Company physical address"
},
{
"key": "tax_rate",
"value": "10.0",
"description": "Default tax rate percentage (e.g., 10.0 for 10%)"
},
{
"key": "platform_currency",
"value": "EUR",
"description": "Platform-wide currency setting for displaying prices"
}
]
for setting_data in company_settings:
# Check if setting exists
existing = db.query(SystemSettings).filter(
SystemSettings.key == setting_data["key"]
).first()
if existing:
# Update existing setting
existing.value = setting_data["value"]
existing.description = setting_data["description"]
if admin_id:
existing.updated_by_id = admin_id
print(f" ✓ Updated setting: {setting_data['key']}")
else:
# Create new setting
new_setting = SystemSettings(
key=setting_data["key"],
value=setting_data["value"],
description=setting_data["description"],
updated_by_id=admin_id
)
db.add(new_setting)
print(f" ✓ Created setting: {setting_data['key']}")
db.commit()
print("✓ Company information seeded successfully!\n")
def main():
"""Main seed function"""
db: Session = SessionLocal()
try:
print("=" * 80)
print("SEEDING BANNERS AND COMPANY INFORMATION")
print("=" * 80)
print()
seed_banners(db)
seed_company_info(db)
print("=" * 80)
print("✓ All data seeded successfully!")
print("=" * 80)
except Exception as e:
db.rollback()
print(f"\n✗ Error seeding data: {e}")
import traceback
traceback.print_exc()
raise
finally:
db.close()
if __name__ == "__main__":
main()