""" Flask application factory for Garmin Health Lab. Run directly (`python app.py`) for development, or serve with Gunicorn: gunicorn wsgi:app -b 0.0.0.0:5000 """ from flask import Flask, jsonify from flask_cors import CORS import db from config import CORS_ORIGINS, PORT from routes import auth, garmin, health, analysis def create_app(): app = Flask(__name__) CORS(app, resources={r"/api/*": {"origins": CORS_ORIGINS}}, supports_credentials=True) # Create tables once at startup (idempotent). db.init_db() @app.route("/") def index(): return jsonify({"name": "Garmin Health Lab API", "version": "1.0.0"}) @app.route("/api/health/status") def health_status(): return jsonify({"status": "ok", "db": db.DB_TYPE}) app.register_blueprint(auth.bp, url_prefix="/api/auth") app.register_blueprint(garmin.bp, url_prefix="/api/garmin") app.register_blueprint(health.bp, url_prefix="/api/health") app.register_blueprint(analysis.bp, url_prefix="/api/analysis") @app.errorhandler(404) def not_found(_e): return jsonify({"error": "not found"}), 404 @app.errorhandler(500) def server_error(_e): return jsonify({"error": "internal error"}), 500 return app app = create_app() if __name__ == "__main__": app.run(host="0.0.0.0", port=PORT, debug=False)