from flask import Flask from flask_socketio import SocketIO from flask_sqlalchemy import SQLAlchemy from dotenv import load_dotenv import os # Load environment variables load_dotenv() from flask_login import LoginManager # Initialize extensions from extensions import socketio, login_manager, db from models import User def create_app(): app = Flask(__name__) # Configuration app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+mysqlconnector://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}/{os.getenv('DB_NAME')}" app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Initialize extensions with app db.init_app(app) socketio.init_app(app, cors_allowed_origins="*") login_manager.init_app(app) login_manager.login_view = 'auth.login' @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) # Register Blueprints from routes.main import main_bp from routes.auth import auth_bp from routes.admin import admin_bp from routes.api import api_bp app.register_blueprint(main_bp) app.register_blueprint(auth_bp, url_prefix='/auth') app.register_blueprint(admin_bp, url_prefix='/admin') app.register_blueprint(api_bp, url_prefix='/api') # Import events (to register handlers) import events with app.app_context(): # Create tables if they don't exist # Note: In production, use migrations (Alembic/Flask-Migrate) db.create_all() return app if __name__ == '__main__': app = create_app() socketio.run(app, debug=True, port=5000)