This commit is contained in:
Iliyan Angelov
2025-12-03 01:31:34 +02:00
parent e32527ae8c
commit 5fb50983a9
37 changed files with 5844 additions and 201 deletions

View File

@@ -0,0 +1,154 @@
#!/usr/bin/env python3
"""
Master script to seed all test data for the hotel booking system.
This script runs all necessary seed scripts in the correct order.
"""
import sys
import os
from pathlib import Path
# Add the Backend directory to the path
backend_dir = Path(__file__).parent.parent
sys.path.insert(0, str(backend_dir))
# Also add the seeds_data directory like other seed scripts
sys.path.insert(0, str(Path(__file__).parent))
import bcrypt
def ensure_housekeeping_role(db):
"""Ensure housekeeping role exists"""
from src.models.role import Role
housekeeping_role = db.query(Role).filter(Role.name == 'housekeeping').first()
if not housekeeping_role:
print('Creating housekeeping role...')
housekeeping_role = Role(name='housekeeping', description='Housekeeping staff role')
db.add(housekeeping_role)
db.commit()
db.refresh(housekeeping_role)
print('✓ Housekeeping role created')
return housekeeping_role
def ensure_housekeeping_users(db):
"""Ensure housekeeping users exist"""
from src.models.role import Role
from src.models.user import User
housekeeping_role = db.query(Role).filter(Role.name == 'housekeeping').first()
if not housekeeping_role:
print('❌ Housekeeping role not found!')
return
housekeeping_users = [
{
'email': 'housekeeping@gnxsoft.com',
'password': 'housekeeping123',
'full_name': 'Housekeeping Staff',
'phone': '+1 (555) 999-0000'
},
{
'email': 'housekeeping2@gnxsoft.com',
'password': 'housekeeping123',
'full_name': 'Housekeeping Staff 2',
'phone': '+1 (555) 999-0001'
}
]
for user_data in housekeeping_users:
existing = db.query(User).filter(User.email == user_data['email']).first()
if not existing:
password_bytes = user_data['password'].encode('utf-8')
salt = bcrypt.gensalt()
hashed_password = bcrypt.hashpw(password_bytes, salt).decode('utf-8')
user = User(
email=user_data['email'],
password=hashed_password,
full_name=user_data['full_name'],
phone=user_data['phone'],
role_id=housekeeping_role.id,
currency='EUR',
is_active=True
)
db.add(user)
print(f' ✓ Created housekeeping user: {user_data["email"]} - Password: {user_data["password"]}')
else:
print(f' ⚠️ Housekeeping user "{user_data["email"]}" already exists')
db.commit()
def main():
print('=' * 80)
print('SEEDING ALL TEST DATA FOR HOTEL BOOKING SYSTEM')
print('=' * 80)
print()
from src.shared.config.database import SessionLocal
db = SessionLocal()
try:
# Step 1: Ensure housekeeping role exists
print('Step 1: Ensuring housekeeping role exists...')
ensure_housekeeping_role(db)
print()
# Step 2: Ensure housekeeping users exist
print('Step 2: Ensuring housekeeping users exist...')
ensure_housekeeping_users(db)
print()
# Step 3: Import and run seed scripts
print('Step 3: Running seed scripts...')
print()
# Import seed modules
from seeds_data.seed_initial_data import seed_roles, seed_room_types, seed_admin_user
from seeds_data.seed_users import seed_users
from seeds_data.seed_rooms import seed_rooms
from seeds_data.seed_bookings import seed_bookings
# Run seed scripts
print('Running seed_initial_data...')
seed_initial_data.seed_roles(db)
seed_initial_data.seed_room_types(db)
seed_initial_data.seed_admin_user(db)
print()
print('Running seed_users...')
seed_users_module.seed_users(db)
print()
print('Running seed_rooms...')
seed_rooms_module.seed_rooms(db)
print()
print('Running seed_bookings...')
seed_bookings_module.seed_bookings(db)
print()
print('=' * 80)
print('✅ ALL TEST DATA SEEDED SUCCESSFULLY!')
print('=' * 80)
print()
print('📋 Test Accounts:')
print(' Staff: staff@gnxsoft.com / staff123')
print(' Housekeeping: housekeeping@gnxsoft.com / housekeeping123')
print(' Housekeeping 2: housekeeping2@gnxsoft.com / housekeeping123')
print(' Customer: customer@gnxsoft.com / customer123')
print()
print('🧪 To test notifications:')
print(' 1. Log in as staff (staff@gnxsoft.com)')
print(' 2. Go to Bookings and mark a checked_in booking as checked_out')
print(' 3. Log in as housekeeping user in another browser/tab')
print(' 4. You should receive a real-time notification about the room needing cleaning')
print('=' * 80)
except Exception as e:
print(f'\n❌ Error: {e}')
import traceback
traceback.print_exc()
db.rollback()
finally:
db.close()
if __name__ == '__main__':
main()