2026-03-06 15:26:49 +03:00
|
|
|
import asyncio
|
|
|
|
|
from contextlib import asynccontextmanager
|
|
|
|
|
|
|
|
|
|
from fastapi import FastAPI, Depends, Request
|
|
|
|
|
from fastapi.responses import RedirectResponse
|
2026-03-04 22:01:58 +03:00
|
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
|
from starlette.middleware.sessions import SessionMiddleware
|
|
|
|
|
|
2026-03-06 15:26:49 +03:00
|
|
|
from web.auth import get_current_user
|
2026-03-04 22:01:58 +03:00
|
|
|
from web.config import settings
|
2026-03-06 15:26:49 +03:00
|
|
|
from web.health_checker import health_check_loop
|
|
|
|
|
from web.models import User
|
2026-03-06 15:29:42 +03:00
|
|
|
from web.routes import auth, profile, reset, evotor, vk
|
2026-03-06 15:26:49 +03:00
|
|
|
from web.routes import connections
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@asynccontextmanager
|
|
|
|
|
async def lifespan(app: FastAPI):
|
|
|
|
|
task = asyncio.create_task(health_check_loop(settings.HEALTH_CHECK_INTERVAL_SECONDS))
|
|
|
|
|
yield
|
|
|
|
|
task.cancel()
|
|
|
|
|
try:
|
|
|
|
|
await task
|
|
|
|
|
except asyncio.CancelledError:
|
|
|
|
|
pass
|
2026-03-04 22:01:58 +03:00
|
|
|
|
2026-03-06 15:26:49 +03:00
|
|
|
|
|
|
|
|
app = FastAPI(title="EvoSync — Личный кабинет", lifespan=lifespan)
|
2026-03-04 22:01:58 +03:00
|
|
|
|
|
|
|
|
app.add_middleware(SessionMiddleware, secret_key=settings.SECRET_KEY)
|
|
|
|
|
app.mount("/static", StaticFiles(directory="web/static"), name="static")
|
|
|
|
|
|
|
|
|
|
app.include_router(auth.router)
|
|
|
|
|
app.include_router(profile.router)
|
|
|
|
|
app.include_router(reset.router)
|
2026-03-05 21:33:41 +03:00
|
|
|
app.include_router(evotor.router)
|
2026-03-06 15:26:49 +03:00
|
|
|
app.include_router(connections.router)
|
2026-03-06 15:29:42 +03:00
|
|
|
app.include_router(vk.router)
|
2026-03-06 15:26:49 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/")
|
|
|
|
|
def home(request: Request, user: User | None = Depends(get_current_user)):
|
|
|
|
|
if user:
|
|
|
|
|
return RedirectResponse("/profile", 302)
|
|
|
|
|
return RedirectResponse("/login", 302)
|