feat: 初始提交

This commit is contained in:
anonymous
2025-10-21 09:38:26 +08:00
committed by t59688
parent 2965b8e28f
commit c9fc816fab
175 changed files with 23968 additions and 87 deletions

105
backend/app/main.py Normal file
View File

@@ -0,0 +1,105 @@
"""FastAPI 应用入口,负责装配路由、依赖与生命周期管理。"""
import logging
from logging.config import dictConfig
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from .core.config import settings
from .db.init_db import init_db
from .services.prompt_service import PromptService
from .db.session import AsyncSessionLocal
from .api.routers import api_router
dictConfig(
{
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"format": "%(asctime)s [%(levelname)s] %(name)s - %(message)s",
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "default",
}
},
"loggers": {
"backend": {
"level": settings.logging_level,
"handlers": ["console"],
"propagate": False,
},
"app": {
"level": settings.logging_level,
"handlers": ["console"],
"propagate": False,
},
"backend.app": {
"level": settings.logging_level,
"handlers": ["console"],
"propagate": False,
},
"backend.api": {
"level": settings.logging_level,
"handlers": ["console"],
"propagate": False,
},
"backend.services": {
"level": settings.logging_level,
"handlers": ["console"],
"propagate": False,
},
},
"root": {
"level": "WARNING",
"handlers": ["console"],
},
}
)
@asynccontextmanager
async def lifespan(app: FastAPI):
# 应用启动时初始化数据库,并预热提示词缓存
await init_db()
async with AsyncSessionLocal() as session:
prompt_service = PromptService(session)
await prompt_service.preload()
yield
app = FastAPI(
title=settings.app_name,
debug=settings.debug,
version="1.0.0",
lifespan=lifespan,
)
# CORS 配置,生产环境建议改为具体域名
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(api_router)
# 健康检查接口(用于 Docker 健康检查和监控)
@app.get("/health", tags=["Health"])
@app.get("/api/health", tags=["Health"])
async def health_check():
"""健康检查接口,返回应用状态。"""
return {
"status": "healthy",
"app": settings.app_name,
"version": "1.0.0",
}