155 lines
5.2 KiB
Python
Executable File
155 lines
5.2 KiB
Python
Executable File
#!/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()
|
|
|