Stabilize runtime auth and E2E coverage
This commit is contained in:
parent
6a3e3b541c
commit
188e899394
133 changed files with 55987 additions and 6775 deletions
|
|
@ -13,14 +13,22 @@ from fastapi import FastAPI
|
|||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from . import __version__
|
||||
from .auth_sessions import ensure_runtime_tables
|
||||
from .config import settings
|
||||
from .db import close_pool, healthcheck, init_pool
|
||||
from .engine_client import engine_client
|
||||
from .persona_repository import materialize_seed_personas
|
||||
from .session_persistence import ensure_review_tables
|
||||
from .routes import auth as auth_routes
|
||||
from .routes import admin as admin_routes
|
||||
from .routes import eval as eval_routes
|
||||
from .routes import kb as kb_routes
|
||||
from .routes import personas as persona_routes
|
||||
from .routes import sessions as session_routes
|
||||
from .routes import teacher as teacher_routes
|
||||
from .routes import users as user_routes
|
||||
from .routes import voice as voice_routes
|
||||
from .services.voice import voice_service
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
|
|
@ -31,15 +39,24 @@ async def lifespan(app: FastAPI):
|
|||
"""
|
||||
try:
|
||||
await init_pool()
|
||||
await ensure_runtime_tables()
|
||||
await ensure_review_tables()
|
||||
if settings.auto_seed_personas:
|
||||
await materialize_seed_personas()
|
||||
await admin_routes.apply_engine_config_from_store()
|
||||
except Exception as exc: # DB 없어도 store 폴백으로 1턴 동작 (dev/로컬)
|
||||
if settings.environment != "dev":
|
||||
raise
|
||||
import logging
|
||||
logging.getLogger("uvicorn.error").warning(
|
||||
"DB 풀 초기화 실패 — store 인메모리 폴백으로 degraded 기동: %s", exc
|
||||
)
|
||||
await engine_client.startup()
|
||||
await voice_service.startup()
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
await voice_service.shutdown()
|
||||
await engine_client.shutdown()
|
||||
try:
|
||||
await close_pool()
|
||||
|
|
@ -59,14 +76,18 @@ app.add_middleware(
|
|||
CORSMiddleware,
|
||||
allow_origins=settings.cors_origins,
|
||||
allow_credentials=True, # __Host- HttpOnly 쿠키 전송
|
||||
allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
||||
allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# TODO: Presidio PII 마스킹 미들웨어 (외부 LLM 경로 진입 전 하드 게이트, R7/F-03)
|
||||
|
||||
app.include_router(auth_routes.router)
|
||||
app.include_router(admin_routes.router)
|
||||
app.include_router(persona_routes.router)
|
||||
app.include_router(session_routes.router)
|
||||
app.include_router(teacher_routes.router)
|
||||
app.include_router(user_routes.router)
|
||||
# Features 트랙 스텁 라우터(evaluator/voice/rag 가 채움). 등록만 — import 가능 보장.
|
||||
app.include_router(eval_routes.router)
|
||||
app.include_router(voice_routes.router)
|
||||
|
|
@ -77,12 +98,14 @@ app.include_router(kb_routes.router)
|
|||
async def health() -> dict[str, object]:
|
||||
"""liveness + DB + 엔진 게이트웨이 readiness."""
|
||||
db_ok = await healthcheck()
|
||||
engine_ok = await engine_client.health()
|
||||
engine = await engine_client.health_detail()
|
||||
engine_ok = bool(engine.get("ok"))
|
||||
return {
|
||||
"status": "ok" if db_ok else "degraded",
|
||||
"status": "ok" if db_ok and engine_ok else "degraded",
|
||||
"version": __version__,
|
||||
"environment": settings.environment,
|
||||
"db": db_ok,
|
||||
"engine": engine_ok,
|
||||
"engine_detail": engine.get("detail"),
|
||||
"engine_mode": settings.engine_mode,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue