This commit is contained in:
root
2026-10-16 13:51:00 +08:00
parent 6bf949949c
commit 8fc899d0a9
3830 changed files with 11228 additions and 188377 deletions
+90
View File
@@ -0,0 +1,90 @@
"""FastAPI 应用入口"""
import uuid
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from app.config import settings
from app.core.response import register_exception_handlers, request_id_ctx
from app.database import engine
from app.redis_client import redis_client
@asynccontextmanager
async def lifespan(app: FastAPI):
# 周期任务(推荐激活/创作收益/超时关单),进程退出时取消
from app.services import settle_service
tasks = settle_service.start_periodic_tasks()
yield
for t in tasks:
t.cancel()
# 关闭连接池
await redis_client.aclose()
await engine.dispose()
app = FastAPI(
title="短视频应用 API",
version="1.0.0",
lifespan=lifespan,
docs_url="/docs" if settings.app_env == "dev" else None,
redoc_url=None,
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.middleware("http")
async def request_id_middleware(request: Request, call_next):
"""request_id 贯穿:优先取客户端 X-Request-ID,否则生成"""
rid = request.headers.get("X-Request-ID") or str(uuid.uuid4())
request_id_ctx.set(rid)
response = await call_next(request)
response.headers["X-Request-ID"] = rid
return response
register_exception_handlers(app)
@app.get("/health", include_in_schema=False)
async def health() -> dict:
return {"status": "ok"}
# 本地文件存储(开发环境):/static 访问 server/uploads
from fastapi.staticfiles import StaticFiles
from app.config import BASE_DIR
(BASE_DIR / "uploads").mkdir(parents=True, exist_ok=True)
app.mount("/static", StaticFiles(directory=BASE_DIR / "uploads"), name="static")
# 业务路由(按模块逐步注册)
from app.api.v1 import admin, auth, common, incentives, interactions, invite, membership, payments, users, videos
app.include_router(auth.router, prefix="/api/v1")
app.include_router(users.router, prefix="/api/v1")
app.include_router(videos.router, prefix="/api/v1")
app.include_router(videos.router_tags, prefix="/api/v1")
app.include_router(videos.router_search, prefix="/api/v1")
app.include_router(interactions.router_videos, prefix="/api/v1")
app.include_router(interactions.router_comments, prefix="/api/v1")
app.include_router(membership.router, prefix="/api/v1")
app.include_router(payments.router, prefix="/api/v1")
app.include_router(payments.router_callbacks, prefix="/api/v1")
app.include_router(incentives.router_referral, prefix="/api/v1")
app.include_router(incentives.router_assets, prefix="/api/v1")
app.include_router(common.router, prefix="/api/v1")
app.include_router(admin.router, prefix="/api/v1")
app.include_router(invite.router, prefix="/api/v1")
# 推广落地页(根路径 /r/{code},对应 referral/me 返回的 invite_url)
app.include_router(invite.router_page)