"""app.py — Точка входа. Только Flask + регистрация маршрутов.""" from dotenv import load_dotenv from flask import Flask # Слои import schema from test_routes import test_bp from upload import upload_bp from api import api_bp # Маршруты (разделены по файлам) from routes.main import index from routes.parse import parse from routes.misc import health, logs from routes.llm import process as llm_process load_dotenv() class ContractsApp: """ Главный класс приложения. Собирает Flask, регистрирует маршруты и blueprint'ы. Запуск: ContractsApp().run() — dev-сервер gunicorn app:application — production """ def __init__(self): self.app = Flask(__name__) # Создать таблицы в БД (IF NOT EXISTS — безопасно) schema.ensure_schema() # Зарегистрировать маршруты self._add_routes() def _add_routes(self): """Подключить все URL к обработчикам.""" # Главные: загрузка, просмотр self.app.add_url_rule("/", "index", index, methods=["GET", "POST"]) # Парсинг: SSE-поток self.app.add_url_rule("/parse/", "parse", parse) # LLM: страница + SSE-извлечение self.app.add_url_rule("/llm", "llm_page", lambda: __import__('flask').render_template('llm.html')) self.app.add_url_rule("/llm/process/", "llm_process", llm_process) # Служебные self.app.add_url_rule("/health", "health", health) self.app.add_url_rule("/logs", "logs", logs) # Blueprint'ы self.app.register_blueprint(test_bp) self.app.register_blueprint(upload_bp) self.app.register_blueprint(api_bp) def run(self): """Dev-сервер на порту 5000.""" self.app.run(host="0.0.0.0", port=5000) if __name__ == "__main__": ContractsApp().run() # Для gunicorn: gunicorn app:application application = ContractsApp().app