from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager from flask_migrate import Migrate from flask_cors import CORS from dotenv import load_dotenv from config.config import Config import os load_dotenv() db = SQLAlchemy() login_manager = LoginManager() migrate = Migrate() def create_app(): app = Flask(__name__) # Configuration app.config.from_object(Config) # Initialize extensions db.init_app(app) login_manager.init_app(app) migrate.init_app(app, db) CORS(app) # Login manager configuration login_manager.login_view = 'auth.login' login_manager.login_message = 'Please log in to access this page.' @login_manager.user_loader def load_user(user_id): from app.models.user import User return User.query.get(int(user_id)) # Register blueprints from app.routes.auth import auth_bp from app.routes.main import main_bp from app.routes.classrooms import classrooms_bp from app.routes.schedule import schedule_bp app.register_blueprint(auth_bp) app.register_blueprint(main_bp) app.register_blueprint(classrooms_bp, url_prefix='/classrooms') app.register_blueprint(schedule_bp, url_prefix='/schedule') # Create database tables with app.app_context(): db.create_all() # Create default admin user if not exists from app.models.user import User if not User.query.filter_by(email='admin@edu-space.com').first(): admin = User( email='admin@edu-space.com', name='System Administrator', role='admin' ) admin.set_password('admin123') # Change this in production db.session.add(admin) db.session.commit() return app