Files
remnawave-bedolaga-telegram…/app/webapi/app.py
T

143 lines
5.3 KiB
Python

from __future__ import annotations
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.config import settings
from .middleware import RequestLoggingMiddleware
from .routes import (
broadcasts,
backups,
campaigns,
config,
health,
main_menu_buttons,
promocodes,
miniapp,
promo_groups,
promo_offers,
pages,
remnawave,
stats,
subscriptions,
tickets,
tokens,
transactions,
users,
)
OPENAPI_TAGS = [
{
"name": "health",
"description": "Мониторинг состояния административного API и связанных сервисов.",
},
{
"name": "stats",
"description": "Сводные показатели по пользователям, подпискам и платежам.",
},
{
"name": "settings",
"description": "Получение и изменение конфигурации бота из административной панели.",
},
{
"name": "main-menu",
"description": "Управление кнопками главного меню Telegram-бота.",
},
{
"name": "users",
"description": "Управление пользователями, балансом и статусами подписок.",
},
{
"name": "subscriptions",
"description": "Создание, продление и настройка подписок бота.",
},
{
"name": "support",
"description": "Работа с тикетами поддержки, приоритетами и ограничениями на ответы.",
},
{
"name": "transactions",
"description": "История финансовых операций и пополнений баланса.",
},
{
"name": "promo-groups",
"description": "Создание и управление промо-группами и их участниками.",
},
{
"name": "promo-offers",
"description": "Управление промо-предложениями, шаблонами и журналом событий.",
},
{
"name": "auth",
"description": "Управление токенами доступа к административному API.",
},
{
"name": "remnawave",
"description": (
"Интеграция с RemnaWave: статус панели, управление нодами, сквадами и синхронизацией "
"данных между ботом и панелью."
),
},
{
"name": "miniapp",
"description": "Endpoint для Telegram Mini App с информацией о подписке пользователя.",
},
{
"name": "pages",
"description": "Управление контентом публичных страниц: оферта, политика, FAQ и правила.",
},
]
def create_web_api_app() -> FastAPI:
docs_config = settings.get_web_api_docs_config()
app = FastAPI(
title=settings.WEB_API_TITLE,
version=settings.WEB_API_VERSION,
docs_url=docs_config.get("docs_url"),
redoc_url=docs_config.get("redoc_url"),
openapi_url=docs_config.get("openapi_url"),
openapi_tags=OPENAPI_TAGS,
swagger_ui_parameters={"persistAuthorization": True},
)
allowed_origins = settings.get_web_api_allowed_origins()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"] if allowed_origins == ["*"] else allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
if settings.WEB_API_REQUEST_LOGGING:
app.add_middleware(RequestLoggingMiddleware)
app.include_router(health.router)
app.include_router(stats.router, prefix="/stats", tags=["stats"])
app.include_router(config.router, prefix="/settings", tags=["settings"])
app.include_router(users.router, prefix="/users", tags=["users"])
app.include_router(subscriptions.router, prefix="/subscriptions", tags=["subscriptions"])
app.include_router(tickets.router, prefix="/tickets", tags=["support"])
app.include_router(transactions.router, prefix="/transactions", tags=["transactions"])
app.include_router(promo_groups.router, prefix="/promo-groups", tags=["promo-groups"])
app.include_router(promo_offers.router, prefix="/promo-offers", tags=["promo-offers"])
app.include_router(
main_menu_buttons.router,
prefix="/main-menu/buttons",
tags=["main-menu"],
)
app.include_router(pages.router, prefix="/pages", tags=["pages"])
app.include_router(promocodes.router, prefix="/promo-codes", tags=["promo-codes"])
app.include_router(broadcasts.router, prefix="/broadcasts", tags=["broadcasts"])
app.include_router(backups.router, prefix="/backups", tags=["backups"])
app.include_router(campaigns.router, prefix="/campaigns", tags=["campaigns"])
app.include_router(tokens.router, prefix="/tokens", tags=["auth"])
app.include_router(remnawave.router, prefix="/remnawave", tags=["remnawave"])
app.include_router(miniapp.router, prefix="/miniapp", tags=["miniapp"])
return app