56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
import os
|
|
from flask import Flask
|
|
from extensions import db, login_manager, csrf, hash_password, check_password
|
|
from sqlalchemy import text
|
|
|
|
def create_app():
|
|
app = Flask(__name__)
|
|
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'team-tryouts-secret-key-change-in-production')
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///team_tryouts.db'
|
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
app.config['WTF_CSRF_ENABLED'] = True
|
|
|
|
db.init_app(app)
|
|
login_manager.init_app(app)
|
|
csrf.init_app(app)
|
|
|
|
from routes.auth import auth_bp
|
|
from routes.tryouts import tryouts_bp
|
|
from routes.evaluations import evaluations_bp
|
|
from routes.users import users_bp
|
|
from routes.main import main_bp
|
|
from routes.teams import teams_bp
|
|
from routes.matches import matches_bp
|
|
|
|
app.register_blueprint(auth_bp)
|
|
app.register_blueprint(tryouts_bp)
|
|
app.register_blueprint(evaluations_bp)
|
|
app.register_blueprint(users_bp)
|
|
app.register_blueprint(main_bp)
|
|
app.register_blueprint(teams_bp)
|
|
app.register_blueprint(matches_bp)
|
|
|
|
with app.app_context():
|
|
import models
|
|
from models import User, MatchParticipant
|
|
try:
|
|
# Check if the database schema is up to date by testing a query
|
|
# that uses all model columns including team_side for match participants
|
|
db.session.execute(text('SELECT games, team_side FROM match_participants LIMIT 1'))
|
|
db.create_all()
|
|
except Exception:
|
|
# If there's a schema mismatch, drop and recreate all tables
|
|
db.session.rollback()
|
|
db.drop_all()
|
|
db.create_all()
|
|
|
|
# Seed database if empty
|
|
if User.query.count() == 0:
|
|
from seed import seed_database
|
|
seed_database()
|
|
|
|
return app
|
|
|
|
if __name__ == '__main__':
|
|
app = create_app()
|
|
app.run(debug=True, host='0.0.0.0', port=5000) |