69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
"""
|
|
app.py — Точка входа и сборка слоёв.
|
|
|
|
Бизнес-логики НОЛЬ. Только:
|
|
1. Инициализация схемы БД (schema.ensure_schema)
|
|
2. Регистрация Blueprint-ов (test, api — будут добавляться)
|
|
|
|
Правило: если в app.py появляется if/for или бизнес-слово — это лишнее.
|
|
"""
|
|
|
|
from dotenv import load_dotenv
|
|
from flask import Flask, render_template
|
|
|
|
import schema
|
|
from test_routes import test_bp
|
|
from upload import upload_bp
|
|
from api import api_bp
|
|
|
|
load_dotenv()
|
|
|
|
|
|
class ContractsApp:
|
|
"""
|
|
Главный класс приложения.
|
|
Собирает все слои вместе, не содержит логики.
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.app = Flask(__name__)
|
|
|
|
# 1. Создать таблицы при старте (если их ещё нет)
|
|
schema.ensure_schema()
|
|
|
|
# 2. Собрать маршруты
|
|
self._add_routes()
|
|
|
|
def _add_routes(self):
|
|
"""Регистрация всех Blueprint-ов и системных маршрутов."""
|
|
|
|
# -- Системные маршруты --
|
|
self.app.add_url_rule("/", "index", self._upload_page)
|
|
self.app.add_url_rule("/health", "health", self._health)
|
|
|
|
# -- Blueprint-ы (каждый слой — отдельный Blueprint) --
|
|
self.app.register_blueprint(test_bp)
|
|
self.app.register_blueprint(upload_bp)
|
|
self.app.register_blueprint(api_bp)
|
|
|
|
def _health(self):
|
|
"""Health check для платформы."""
|
|
return "OK", 200, {"Content-Type": "text/plain"}
|
|
|
|
def _upload_page(self):
|
|
"""Страница загрузки договора (UI)."""
|
|
return render_template("upload.html")
|
|
|
|
def run(self):
|
|
"""Запуск Flask (только для разработки, в production — gunicorn)."""
|
|
self.app.run(host="0.0.0.0", port=5000)
|
|
|
|
|
|
# ── Точка входа ─────────────────────────────────────────────────
|
|
|
|
if __name__ == "__main__":
|
|
app_instance = ContractsApp()
|
|
app_instance.run()
|
|
app_instance = ContractsApp()
|
|
app_instance.run()
|