- Add comprehensive DATABASE_SCHEMA.md with complete SQLite schemas - Document all 3 databases: activities.db, game_library.db, test_activities.db - Include recreation methods, examples, and troubleshooting - Add scripts/create_databases.py for automated database setup - Move README.md to project root for better visibility - Ensure *.db files excluded via .gitignore are fully documented 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
164 lines
5.4 KiB
Python
164 lines
5.4 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
DATABASE SETUP SCRIPT - INDEX-SISTEM-JOCURI
|
|
|
|
Script pentru recrearea bazelor de date din .gitignore
|
|
Folosește clasele DatabaseManager pentru consistență
|
|
|
|
Usage:
|
|
python scripts/create_databases.py
|
|
python scripts/create_databases.py --clear-existing
|
|
"""
|
|
|
|
import sys
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
# Add src to path so we can import our modules
|
|
sys.path.append(str(Path(__file__).parent.parent / 'src'))
|
|
|
|
from database import DatabaseManager
|
|
from game_library_manager import GameLibraryManager
|
|
|
|
def create_main_database(db_path: str = "data/activities.db", clear: bool = False):
|
|
"""Create the main activities database"""
|
|
db_file = Path(db_path)
|
|
|
|
if clear and db_file.exists():
|
|
print(f"🗑️ Removing existing database: {db_path}")
|
|
db_file.unlink()
|
|
|
|
print(f"📊 Creating main database: {db_path}")
|
|
db = DatabaseManager(db_path)
|
|
|
|
# Test the database
|
|
try:
|
|
stats = db.get_statistics()
|
|
print(f"✅ Database created successfully: {stats['total_activities']} activities")
|
|
return True
|
|
except Exception as e:
|
|
print(f"❌ Error creating database: {e}")
|
|
return False
|
|
|
|
def create_game_library_database(db_path: str = "data/game_library.db", clear: bool = False):
|
|
"""Create the legacy game library database"""
|
|
db_file = Path(db_path)
|
|
|
|
if clear and db_file.exists():
|
|
print(f"🗑️ Removing existing database: {db_path}")
|
|
db_file.unlink()
|
|
|
|
print(f"📊 Creating game library database: {db_path}")
|
|
manager = GameLibraryManager(db_path)
|
|
|
|
print(f"✅ Game library database created successfully")
|
|
return True
|
|
|
|
def create_test_database(db_path: str = "data/test_activities.db", clear: bool = False):
|
|
"""Create the test database"""
|
|
db_file = Path(db_path)
|
|
|
|
if clear and db_file.exists():
|
|
print(f"🗑️ Removing existing database: {db_path}")
|
|
db_file.unlink()
|
|
|
|
print(f"📊 Creating test database: {db_path}")
|
|
db = DatabaseManager(db_path)
|
|
|
|
# Add some test data
|
|
test_activity = {
|
|
'title': 'Test Activity - Setup Script',
|
|
'description': 'This is a test activity created by the setup script',
|
|
'file_path': 'test/sample.txt',
|
|
'file_type': 'TXT',
|
|
'category': 'test',
|
|
'age_group': '8-12 ani',
|
|
'participants': '5-10 persoane',
|
|
'duration': '15-30min',
|
|
'materials': 'Fără materiale',
|
|
'tags': '["test", "setup"]',
|
|
'source_text': 'Sample test content for verification'
|
|
}
|
|
|
|
try:
|
|
db.insert_activity(test_activity)
|
|
stats = db.get_statistics()
|
|
print(f"✅ Test database created with sample data: {stats['total_activities']} activities")
|
|
return True
|
|
except Exception as e:
|
|
print(f"❌ Error creating test database: {e}")
|
|
return False
|
|
|
|
def ensure_data_directory():
|
|
"""Ensure the data directory exists"""
|
|
data_dir = Path("data")
|
|
if not data_dir.exists():
|
|
print(f"📁 Creating data directory: {data_dir}")
|
|
data_dir.mkdir(parents=True)
|
|
else:
|
|
print(f"📁 Data directory exists: {data_dir}")
|
|
|
|
def main():
|
|
"""Main setup function"""
|
|
parser = argparse.ArgumentParser(description='Create databases for INDEX-SISTEM-JOCURI')
|
|
parser.add_argument('--clear-existing', '-c', action='store_true',
|
|
help='Remove existing databases before creating new ones')
|
|
parser.add_argument('--main-only', action='store_true',
|
|
help='Create only the main activities database')
|
|
parser.add_argument('--test-only', action='store_true',
|
|
help='Create only the test database')
|
|
|
|
args = parser.parse_args()
|
|
|
|
print("🚀 DATABASE SETUP - INDEX-SISTEM-JOCURI")
|
|
print("=" * 50)
|
|
|
|
# Ensure data directory exists
|
|
ensure_data_directory()
|
|
|
|
success_count = 0
|
|
total_count = 0
|
|
|
|
if args.test_only:
|
|
total_count = 1
|
|
if create_test_database(clear=args.clear_existing):
|
|
success_count += 1
|
|
elif args.main_only:
|
|
total_count = 1
|
|
if create_main_database(clear=args.clear_existing):
|
|
success_count += 1
|
|
else:
|
|
# Create all databases
|
|
databases = [
|
|
("Main activities", lambda: create_main_database(clear=args.clear_existing)),
|
|
("Game library", lambda: create_game_library_database(clear=args.clear_existing)),
|
|
("Test activities", lambda: create_test_database(clear=args.clear_existing))
|
|
]
|
|
|
|
total_count = len(databases)
|
|
|
|
for name, create_func in databases:
|
|
print(f"\n📂 Creating {name} database...")
|
|
try:
|
|
if create_func():
|
|
success_count += 1
|
|
except Exception as e:
|
|
print(f"❌ Failed to create {name} database: {e}")
|
|
|
|
print("\n" + "=" * 50)
|
|
print(f"🎯 SUMMARY: {success_count}/{total_count} databases created successfully")
|
|
|
|
if success_count == total_count:
|
|
print("✅ All databases ready!")
|
|
print("\nNext steps:")
|
|
print("1. Run indexer: cd src && python indexer.py --clear-db")
|
|
print("2. Start web app: cd src && python app.py")
|
|
else:
|
|
print("⚠️ Some databases failed to create. Check errors above.")
|
|
return 1
|
|
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main()) |