Files
rezept_finder/backend/app/__init__.py
T
2026-06-10 11:19:39 +02:00

66 lines
1.9 KiB
Python

import os
from flask import Flask
from flask_migrate import Migrate
from flask_socketio import SocketIO
from dotenv import load_dotenv
from sqlalchemy import text
from .models import db
socketio = SocketIO(cors_allowed_origins="*")
migrate = Migrate()
def create_app():
load_dotenv()
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY", "dev-secret")
app.config["SQLALCHEMY_DATABASE_URI"] = os.getenv(
"DATABASE_URL",
"postgresql+psycopg2://rezept_finder:rezept_finder@localhost:5432/rezept_finder",
)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
@app.after_request
def add_cors_headers(response):
origin = os.getenv("FRONTEND_ORIGIN") or os.getenv("APP_DOMAIN") or "*"
response.headers["Access-Control-Allow-Origin"] = origin
response.headers["Access-Control-Allow-Headers"] = "Content-Type"
response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS"
return response
db.init_app(app)
migrate.init_app(app, db)
socketio.init_app(
app,
cors_allowed_origins=os.getenv("FRONTEND_ORIGIN") or os.getenv("APP_DOMAIN") or "*",
path=os.getenv("SOCKETIO_PATH", "/api/socket.io"),
)
from .routes.sessions import bp as sessions_bp
app.register_blueprint(sessions_bp, url_prefix="/api/sessions")
from .socket import events # noqa: F401
with app.app_context():
ensure_schema()
return app
def ensure_schema():
db.create_all()
engine_name = db.engine.url.get_backend_name()
if engine_name != "postgresql":
return
db.session.execute(text(
"ALTER TABLE session_settings "
"ADD COLUMN IF NOT EXISTS match_mode VARCHAR(20) NOT NULL DEFAULT 'first_match'"
))
db.session.execute(text(
"ALTER TABLE session_settings "
"ADD COLUMN IF NOT EXISTS voting_round INTEGER NOT NULL DEFAULT 1"
))
db.session.commit()