""" Database initialization script. Creates the database tables and populates with initial family member data. """ import sys from pathlib import Path # Add the app directory to the path sys.path.append(str(Path(__file__).parent)) from app.core.database import engine, Base from app.models.user import User from app.models.chore import Chore from app.models.meal import Meal from app.core.security import get_password_hash from sqlalchemy.orm import Session def init_database(): """Initialize the database with tables and default data.""" print("Creating database tables...") Base.metadata.create_all(bind=engine) print("āœ… Database tables created successfully!") # Create a session to add default users db = Session(bind=engine) try: # Check if users already exist existing_user = db.query(User).first() if existing_user: print("āš ļø Database already contains users. Skipping initialization.") return print("Adding default family members...") # Family members with default password "password123" family_members = [ {"username": "lou", "email": "lou@family.local", "full_name": "Lou", "is_admin": False}, {"username": "jess", "email": "jess@family.local", "full_name": "Jess", "is_admin": True}, {"username": "william", "email": "william@family.local", "full_name": "William", "is_admin": False}, {"username": "xander", "email": "xander@family.local", "full_name": "Xander", "is_admin": False}, {"username": "bella", "email": "bella@family.local", "full_name": "Bella", "is_admin": False}, ] default_password = "password123" # Shorter password for bcrypt (max 72 bytes) hashed_password = get_password_hash(default_password) for member_data in family_members: user = User( username=member_data["username"], email=member_data["email"], full_name=member_data["full_name"], hashed_password=hashed_password, is_admin=member_data["is_admin"], is_active=True ) db.add(user) db.commit() print("āœ… Family members added successfully!") print("\nšŸ”‘ Default Login Credentials:") print(" Username: jess (admin) | Password: password123") print(" Username: lou | Password: password123") print(" Username: william | Password: password123") print(" Username: xander | Password: password123") print(" Username: bella | Password: password123") print("\nāš ļø Please change these passwords after first login!") except Exception as e: print(f"āŒ Error initializing database: {e}") db.rollback() raise finally: db.close() if __name__ == "__main__": init_database()