Files
contracts-app/site/app.py
T
naeel cb92f9072e fix(ui): корень /, лого Nubes + favicon, убраны поля номера/клиента/даты
- Страница перенесена с /upload на / (корень)
- Верхняя панель с логотипом Nubes (nubes-logo.svg)
- favicon.png из ipwhitelist-app
- Поля номера/клиента/даты убраны — договор создаётся авто
- Исправлен JS (относительные URL)
2026-06-15 06:35:02 +04:00

80 lines
2.6 KiB
Python

"""
app.py — Точка входа и сборка слоёв.
Бизнес-логики НОЛЬ. Только:
1. Инициализация схемы БД (schema.ensure_schema)
2. Регистрация Blueprint-ов (test, api — будут добавляться)
Правило: если в app.py появляется if/for или бизнес-слово — это лишнее.
"""
import os
from dotenv import load_dotenv
from flask import Flask, render_template
import db
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 _index(self):
"""Главная страница — статус сервиса."""
conn, _ = db.connect()
db_status = "connected" if conn else "no DB"
return render_template("index.html", db_status=db_status)
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()
if __name__ == "__main__":
app_instance = ContractsApp()
app_instance.run()