fs-lawrisk/app.py

54 lines
1.4 KiB
Python
Raw Normal View History

"""Flask application entry point."""
2025-10-22 19:59:48 +08:00
from __future__ import annotations
import os
from flask import Flask, jsonify
2025-10-22 19:59:48 +08:00
from lawrisk.utils.env_loader import load_env
from lawrisk.middleware.smart_cors_middleware import init_smart_cors
from lawrisk.services.lawrisk_service import ensure_database, ensure_schema
from lawrisk.api.v1 import v1_bp
from lawrisk.api.v2 import v2_bp
2025-10-22 19:59:48 +08:00
def create_app() -> Flask:
"""Create and configure Flask application."""
2025-10-22 19:59:48 +08:00
# Load .env before creating app to make CORS/env configs available
load_env()
2025-10-22 19:59:48 +08:00
# Ensure DB and schema exist before serving
try:
ensure_database()
ensure_schema()
except Exception:
# Do not block app start; errors will surface on first request
pass
2025-10-22 19:59:48 +08:00
app = Flask(__name__)
2025-10-22 19:59:48 +08:00
# Enable CORS using existing middleware
init_smart_cors(app)
# Register blueprints
app.register_blueprint(v1_bp)
app.register_blueprint(v2_bp)
2025-10-22 19:59:48 +08:00
# Basic health check
@app.get("/healthz")
def healthz():
return jsonify({"status": "ok"})
app.logger.setLevel("INFO")
app.logger.info("Registered routes:")
for rule in sorted(app.url_map.iter_rules(), key=lambda r: r.rule):
methods = ",".join(sorted(rule.methods - {"HEAD", "OPTIONS"}))
app.logger.info(" %s -> %s", rule.rule, methods)
2025-10-22 19:59:48 +08:00
return app
if __name__ == "__main__":
port = int(os.getenv("PORT", "8000"))
app = create_app()
app.run(host="0.0.0.0", port=port)