Files
Hotel-Booking/Backend/seeds_data/seed_banners_company.py
Iliyan Angelov 39fcfff811 update
2025-11-30 22:43:09 +02:00

70 lines
5.8 KiB
Python

import sys
import os
from datetime import datetime, timedelta
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from sqlalchemy.orm import Session
from src.shared.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):
print('Seeding banners...')
admin_user = db.query(User).filter(User.email == 'admin@hotel.com').first()
admin_id = admin_user.id if admin_user else None
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)')
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:
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):
print('Seeding company information...')
admin_user = db.query(User).filter(User.email == 'admin@hotel.com').first()
admin_id = admin_user.id if admin_user else None
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:
existing = db.query(SystemSettings).filter(SystemSettings.key == setting_data['key']).first()
if existing:
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:
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():
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()