Initial commit - LEGO Instructions Manager v1.5.0

This commit is contained in:
2025-12-09 17:20:41 +11:00
commit 63496b1ccd
68 changed files with 9131 additions and 0 deletions

156
migrate_v1.3.0.py Normal file
View File

@@ -0,0 +1,156 @@
"""
Database Migration Script v1.3.0
Adds:
- thumbnail_path to Instructions table (for PDF thumbnails)
- is_admin to Users table (for admin panel)
"""
import sqlite3
import os
def migrate_database(db_path='lego_instructions.db'):
"""Add new fields for v1.3.0 features."""
if not os.path.exists(db_path):
print(f"Database file '{db_path}' not found.")
print("This is normal for a new installation - no migration needed.")
return
print("="*70)
print("LEGO Instructions Manager - Database Migration v1.3.0")
print("Adding PDF Thumbnails + Admin Panel Support")
print("="*70)
print()
print(f"Database: {db_path}")
print()
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
changes_made = False
# Check Instructions table
cursor.execute("PRAGMA table_info(instructions)")
instruction_columns = [column[1] for column in cursor.fetchall()]
# Add thumbnail_path to instructions
if 'thumbnail_path' not in instruction_columns:
print("📄 Adding 'thumbnail_path' to instructions table...")
cursor.execute("""
ALTER TABLE instructions
ADD COLUMN thumbnail_path VARCHAR(500)
""")
changes_made = True
print(" ✅ Added thumbnail_path column")
else:
print(" thumbnail_path already exists")
# Check Users table
cursor.execute("PRAGMA table_info(users)")
user_columns = [column[1] for column in cursor.fetchall()]
# Add is_admin to users
if 'is_admin' not in user_columns:
print("🛡️ Adding 'is_admin' to users table...")
cursor.execute("""
ALTER TABLE users
ADD COLUMN is_admin BOOLEAN DEFAULT 0 NOT NULL
""")
changes_made = True
print(" ✅ Added is_admin column")
# Create index for performance
print(" Creating index on is_admin...")
try:
cursor.execute("""
CREATE INDEX idx_users_is_admin ON users(is_admin)
""")
print(" ✅ Created index")
except sqlite3.OperationalError:
print(" Index already exists")
else:
print(" is_admin already exists")
if changes_made:
conn.commit()
print()
print("="*70)
print("✅ Migration completed successfully!")
print("="*70)
print()
print("New Features Available:")
print(" 📄 PDF Thumbnail Generation")
print(" 🛡️ Admin Panel")
print()
else:
print()
print("="*70)
print("✅ Database is already up to date!")
print("="*70)
print()
conn.close()
except sqlite3.Error as e:
print()
print("="*70)
print(f"❌ Migration failed: {e}")
print("="*70)
print()
print("Please backup your database and try again.")
return False
return True
if __name__ == "__main__":
print()
# Try to find the database file
db_paths = [
'lego_instructions.db',
'instance/lego_instructions.db',
'../lego_instructions.db',
]
db_found = False
for db_path in db_paths:
if os.path.exists(db_path):
if migrate_database(db_path):
db_found = True
break
if not db_found:
print("="*70)
print("No existing database found.")
print("="*70)
print()
print("If this is a new installation:")
print(" The database will be created with these features when you")
print(" run the application for the first time.")
print()
print("="*70)
print("Next Steps:")
print("="*70)
print()
print("1. Install required package:")
print(" pip install PyMuPDF --break-system-packages")
print()
print("2. Make your first admin user:")
print(" python")
print(" >>> from app import create_app, db")
print(" >>> from app.models.user import User")
print(" >>> app = create_app()")
print(" >>> with app.app_context():")
print(" ... user = User.query.filter_by(username='YOUR_USERNAME').first()")
print(" ... user.is_admin = True")
print(" ... db.session.commit()")
print()
print("3. Restart Flask:")
print(" python run.py")
print()
print("4. Access admin panel:")
print(" http://localhost:5000/admin/")
print()
print("="*70)