基本结构以及计算降雨栅格
This commit is contained in:
+110
@@ -0,0 +1,110 @@
|
||||
"""
|
||||
FastAPI应用主文件
|
||||
"""
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from app.config.settings import get_settings
|
||||
from app.core.database import db_manager
|
||||
from app.utils.logger import setup_logging
|
||||
from app.api.rainfall import router as rainfall_router
|
||||
|
||||
# 初始化日志
|
||||
logger = setup_logging()
|
||||
|
||||
# 获取配置
|
||||
settings = get_settings()
|
||||
|
||||
|
||||
def create_application() -> FastAPI:
|
||||
"""创建FastAPI应用实例"""
|
||||
|
||||
application = FastAPI(
|
||||
title=settings.APP_NAME,
|
||||
version=settings.APP_VERSION,
|
||||
debug=settings.DEBUG,
|
||||
description="基于FastAPI的现代化Web应用框架"
|
||||
)
|
||||
|
||||
# 配置CORS
|
||||
application.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=settings.CORS_ORIGINS if hasattr(settings, 'CORS_ORIGINS') else ["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
return application
|
||||
|
||||
|
||||
# 创建应用实例
|
||||
app = create_application()
|
||||
|
||||
|
||||
# ==================== 启动和关闭事件 ====================
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup_event():
|
||||
"""应用启动时执行"""
|
||||
logger.info(f"正在启动 {settings.APP_NAME} v{settings.APP_VERSION}")
|
||||
logger.info(f"环境: {settings.ENVIRONMENT}")
|
||||
logger.info(f"数据库连接: {settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}")
|
||||
|
||||
# 测试数据库连接
|
||||
if db_manager.test_connection():
|
||||
logger.info("数据库连接成功")
|
||||
else:
|
||||
logger.warning("数据库连接失败,请检查配置")
|
||||
|
||||
|
||||
@app.on_event("shutdown")
|
||||
async def shutdown_event():
|
||||
"""应用关闭时执行"""
|
||||
logger.info("应用正在关闭...")
|
||||
|
||||
|
||||
# ==================== 根路径和健康检查 ====================
|
||||
|
||||
@app.get("/", tags=["基础"])
|
||||
async def root():
|
||||
"""根路径 - 欢迎信息"""
|
||||
return {
|
||||
"app": settings.APP_NAME,
|
||||
"version": settings.APP_VERSION,
|
||||
"environment": settings.ENVIRONMENT.value,
|
||||
"status": "running"
|
||||
}
|
||||
|
||||
|
||||
@app.get("/health", tags=["基础"])
|
||||
async def health_check():
|
||||
"""健康检查接口"""
|
||||
try:
|
||||
# 检查数据库连接
|
||||
db_manager.execute_raw_sql("SELECT 1")
|
||||
db_status = "connected"
|
||||
except Exception as e:
|
||||
db_status = f"error: {str(e)}"
|
||||
|
||||
return {
|
||||
"status": "healthy",
|
||||
"database": db_status,
|
||||
"app_version": settings.APP_VERSION,
|
||||
"environment": settings.ENVIRONMENT.value
|
||||
}
|
||||
|
||||
|
||||
# ==================== 注册路由 ====================
|
||||
|
||||
app.include_router(rainfall_router)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
uvicorn.run(
|
||||
"app.main:app",
|
||||
host=settings.API_HOST,
|
||||
port=settings.API_PORT,
|
||||
reload=settings.RELOAD if hasattr(settings, 'RELOAD') else settings.DEBUG
|
||||
)
|
||||
Reference in New Issue
Block a user