72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
|
|
"""
|
||
|
|
主应用入口
|
||
|
|
"""
|
||
|
|
from fastapi import FastAPI
|
||
|
|
from fastapi.middleware.cors import CORSMiddleware
|
||
|
|
from .core.database import create_tables
|
||
|
|
from .core.config import settings
|
||
|
|
from .routers import auth, user, game, websocket, system, streamer, admin, announcement
|
||
|
|
from .services.scheduler_service import SchedulerService
|
||
|
|
|
||
|
|
# 创建应用
|
||
|
|
app = FastAPI(
|
||
|
|
title="互动竞猜开宝箱系统",
|
||
|
|
description="基于奖池制的直播互动竞猜系统",
|
||
|
|
version="2.0.0",
|
||
|
|
redirect_slashes=False
|
||
|
|
)
|
||
|
|
|
||
|
|
# 添加CORS中间件 - 从配置读取
|
||
|
|
app.add_middleware(
|
||
|
|
CORSMiddleware,
|
||
|
|
allow_origins=settings.cors.get_allow_origins(),
|
||
|
|
allow_credentials=settings.cors.ALLOW_CREDENTIALS,
|
||
|
|
allow_methods=settings.cors.get_allow_methods(),
|
||
|
|
allow_headers=settings.cors.get_allow_headers(),
|
||
|
|
)
|
||
|
|
|
||
|
|
# 注册路由
|
||
|
|
app.include_router(auth.router)
|
||
|
|
app.include_router(user.router)
|
||
|
|
app.include_router(game.router)
|
||
|
|
app.include_router(websocket.router)
|
||
|
|
app.include_router(system.router)
|
||
|
|
app.include_router(streamer.router)
|
||
|
|
app.include_router(admin.router) # 管理员后台路由
|
||
|
|
app.include_router(announcement.router) # 公告路由
|
||
|
|
|
||
|
|
@app.on_event("startup")
|
||
|
|
async def startup_event():
|
||
|
|
"""
|
||
|
|
应用启动时创建数据库表
|
||
|
|
"""
|
||
|
|
create_tables()
|
||
|
|
print("Database tables created successfully")
|
||
|
|
|
||
|
|
# 启动定时任务调度器
|
||
|
|
import asyncio
|
||
|
|
asyncio.create_task(SchedulerService.start_scheduler())
|
||
|
|
print("Scheduler service started successfully")
|
||
|
|
|
||
|
|
|
||
|
|
@app.get("/")
|
||
|
|
async def root():
|
||
|
|
"""
|
||
|
|
根路径
|
||
|
|
"""
|
||
|
|
return {
|
||
|
|
"message": "互动竞猜开宝箱系统 API",
|
||
|
|
"version": "1.0.0",
|
||
|
|
"docs": "/docs"
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
import uvicorn
|
||
|
|
uvicorn.run(
|
||
|
|
"backend.app.main:app",
|
||
|
|
host=settings.server.HOST,
|
||
|
|
port=settings.server.PORT,
|
||
|
|
reload=True,
|
||
|
|
log_level=settings.server.LOG_LEVEL
|
||
|
|
)
|