support-bot-saas/backend/app/main.py
ed0ss 69c2bc114b feat: внешний REST API v1 с аутентификацией по API-ключу
- Добавлен роутер /api/v1/ с аутентификацией через API-ключ
- Endpoints: GET /api/v1/me, PATCH /api/v1/me/api-key,
  GET /api/v1/collections, POST /api/v1/tickets, POST /api/v1/search
- На странице настроек: копирование и сброс API-ключа
2026-06-25 11:43:51 +03:00

48 lines
1.3 KiB
Python

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.config import settings
from app.database import engine
from app.models.base import Base
from app.routers import auth, tickets, search, api_v1
from app.middleware import RateLimitMiddleware
from app.metrics import MetricsMiddleware, metrics_endpoint
@asynccontextmanager
async def lifespan(app: FastAPI):
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
yield
app = FastAPI(title=settings.app_name, version="0.1.0", lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=[
"https://sovet.itoservice.ru",
"https://api.sovet.itoservice.ru",
"http://sovet.itoservice.ru",
"http://api.sovet.itoservice.ru",
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.add_middleware(MetricsMiddleware)
app.add_middleware(RateLimitMiddleware, requests_per_minute=30)
app.include_router(auth.router)
app.include_router(tickets.router)
app.include_router(search.router)
app.include_router(api_v1.router)
app.add_route("/api/metrics", metrics_endpoint, methods=["GET"])
@app.get("/api/health")
async def health():
return {"status": "ok"}