From 9b565d0ff4b0751b4a4b4fc0828190f2f7a2af09 Mon Sep 17 00:00:00 2001 From: jessikitty Date: Mon, 26 Jan 2026 21:54:50 +1100 Subject: [PATCH] Add database initialization script --- backend/init_db.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 backend/init_db.py diff --git a/backend/init_db.py b/backend/init_db.py new file mode 100644 index 0000000..fe91721 --- /dev/null +++ b/backend/init_db.py @@ -0,0 +1,77 @@ +""" +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 "changeme123" + 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 = "changeme123" + 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: changeme123") + print(" Username: lou | Password: changeme123") + print(" Username: william | Password: changeme123") + print(" Username: xander | Password: changeme123") + print(" Username: bella | Password: changeme123") + 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()