lct-hack/backend/app/main.py
Ivan Gerasimov 7b7dd38e9f каркас: домен, генерация типов фронта, стенд и карточки задач
Контракт в коде: КИО по нормативу, 43 события WS по шести союзам направлений,
таймеры ГОСТ, таксономия E1–E6, шесть компетенций радара. make types гоняет
их через JSON Schema в generated.ts, тест ловит забытую регенерацию.

Стенд: docker compose postgres + backend, health отвечает, база досягаема
из контейнера бэкенда. Makefile не врёт — нереализованные цели падают
и называют карточку, которая их закроет.

frontend/.npmrc: под WSL2 npm install зависает на дефолтных 15 сокетах.
2026-09-15 19:35:03 +03:00

28 lines
943 B
Python

"""Сборка приложения. Роутеры подключаются по мере готовности — см. tasks/."""
from contextlib import asynccontextmanager
from fastapi import FastAPI
from app.config import get_settings
@asynccontextmanager
async def lifespan(app: FastAPI):
# Прогрев моделей и валидация сценариев — карточки lct-04 и lct-06.
app.state.models_ready = False
yield
app = FastAPI(title="Учебный симулятор занятия для системы 112", lifespan=lifespan)
@app.get("/api/health")
async def health() -> dict:
"""Готовность стенда. Фронт показывает экран «модели прогреваются»."""
settings = get_settings()
return {
"status": "ok",
"models_ready": getattr(app.state, "models_ready", False),
"offline": settings.offline,
}