from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from sqlalchemy import create_engine from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger from .models import Base from .routes.character_route import router as character_router from .routes.user_route import router as user_router from .routes.session_route import router as session_router from .routes.chat_route import router as chat_router from .dependencies.logger import get_logger from .background_tasks import updating_redis_cache from config import get_config #----------------------获取日志------------------------ logger = get_logger() logger.info("日志初始化完成") #----------------------------------------------------- #----------------------获取配置------------------------ Config = get_config() logger.info("配置获取完成") #----------------------------------------------------- #--------------------初始化数据库----------------------- engine = create_engine(Config.SQLALCHEMY_DATABASE_URI) Base.metadata.create_all(bind=engine) logger.info("数据库初始化完成") #------------------------------------------------------ #--------------------设置定时任务----------------------- scheduler = AsyncIOScheduler() scheduler.add_job(updating_redis_cache, CronTrigger.from_crontab("0 4 * * *")) @asynccontextmanager async def lifespan(app:FastAPI): scheduler.start() #启动定时任务 yield scheduler.shutdown() #关闭定时任务 logger.info("定时任务初始化完成") #------------------------------------------------------ #--------------------创建FastAPI实例-------------------- app = FastAPI(lifespan=lifespan) logger.info("FastAPI实例创建完成") #------------------------------------------------------ #---------------------初始化路由------------------------ app.include_router(character_router) app.include_router(user_router) app.include_router(session_router) app.include_router(chat_router) logger.info("路由初始化完成") #------------------------------------------------------- #-------------------设置跨域中间件----------------------- app.add_middleware( CORSMiddleware, allow_origins=["*"], # 允许所有源,也可以指定特定源 allow_credentials=True, allow_methods=["*"], # 允许所有方法 allow_headers=["*"], # 允许所有头 ) #-------------------------------------------------------