diff --git a/entrypoint.sh b/entrypoint.sh index 79b3959..c62c8af 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -41,65 +41,75 @@ echo "PostgreSQL is up - executing command" # Run all initialization in a single Python script to avoid multiple Flask instances echo "Running initialization..." python3 -c " +import sys from app import create_app from models import SiteSettings, db, User -from migrations.add_events_table import upgrade as upgrade_events -from migrations.add_notifs_table import upgrade as upgrade_notifs from utils.email_templates import create_default_templates +def log_error(message, error=None): + print(f'ERROR: {message}', file=sys.stderr) + if error: + print(f'Error details: {str(error)}', file=sys.stderr) + app = create_app() with app.app_context(): - # Run migrations - print('Running database migrations...') - from flask_migrate import upgrade - upgrade() - - # Create events table - print('Creating events table...') try: - upgrade_events() - print('Events table created successfully') + # Run migrations + print('Running database migrations...') + from flask_migrate import upgrade + upgrade() + print('Database migrations completed successfully') + + # Create default site settings + print('Creating default site settings...') + try: + settings = SiteSettings.get_settings() + print('Default site settings created successfully') + except Exception as e: + log_error('Error creating site settings', e) + + # Create admin user if it doesn't exist + print('Creating admin user...') + try: + admin = User.query.filter_by(email='administrator@docupulse.com').first() + if not admin: + print('Admin user not found, creating new admin user...') + admin = User( + username='administrator', + email='administrator@docupulse.com', + last_name='Administrator', + company='DocuPulse', + position='System Administrator', + is_admin=True, + is_active=True, + preferred_view='grid' + ) + admin.set_password('changeme') + print('Admin user object created, attempting to add to database...') + db.session.add(admin) + try: + db.session.commit() + print('Default administrator user created successfully.') + except Exception as e: + db.session.rollback() + log_error('Failed to commit admin user creation', e) + raise + else: + print('Admin user already exists.') + except Exception as e: + log_error('Error during admin user creation/check', e) + raise + + # Create default templates + print('Creating default templates...') + try: + create_default_templates() + print('Default templates created successfully') + except Exception as e: + log_error('Error creating default templates', e) except Exception as e: - print(f'Error creating events table: {e}') - - # Create notifs table - print('Creating notifs table...') - try: - upgrade_notifs() - print('Notifs table created successfully') - except Exception as e: - print(f'Error creating notifs table: {e}') - - # Create default site settings - print('Creating default site settings...') - try: - settings = SiteSettings.get_settings() - print('Default site settings created successfully') - except Exception as e: - print(f'Error creating site settings: {e}') - - # Create admin user if it doesn't exist - print('Creating admin user...') - admin = User.query.filter_by(email='administrator@docupulse.com').first() - if not admin: - admin = User( - username='administrator', - email='administrator@docupulse.com', - last_name='None', - company='docupulse', - is_admin=True, - is_active=True - ) - admin.set_password('changeme') - db.session.add(admin) - db.session.commit() - print('Default administrator user created successfully.') - else: - print('Admin user already exists.') - - # Create default templates - print('Creating default templates...') - create_default_templates() + log_error('Fatal error during initialization', e) + sys.exit(1) " # Start the application