123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from fastapi import FastAPI
- from .api import vector, raster, cd_prediction, unit_grouping, water, agricultural_input, cd_flux_removal
- from .database import engine, Base
- from fastapi.middleware.cors import CORSMiddleware
- import logging
- import sys
- import os
- # 设置日志
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger(__name__)
- def safe_create_tables():
- """
- 安全地创建数据库表
-
- @description: 直接创建表结构,跳过迁移检查
- """
- try:
- # 直接创建数据库表
- Base.metadata.create_all(bind=engine)
- logger.info("数据库表结构创建完成")
-
- except Exception as e:
- logger.error(f"数据库表创建失败: {str(e)}")
- logger.error("请检查数据库连接和表结构定义")
- # 不要退出,继续运行应用
- # sys.exit(1) # 注释掉这行,避免应用退出
- # 执行数据库初始化
- safe_create_tables()
- app = FastAPI(
- title="地图数据处理系统",
- description="一个用于处理地图数据的API系统",
- version="1.0.0",
- openapi_tags=[
- # ...(保持原有标签定义不变)
- ]
- )
- # ---------------------------
- # 添加 CORS 配置(关键修改)
- # ---------------------------
- app.add_middleware(
- CORSMiddleware,
- allow_origins=["https://soilgd.com", "http://localhost:5173", "https://www.soilgd.com"],
- allow_methods=["*"],
- allow_headers=["*"],
- allow_credentials=True,
- )
- # 注册路由(保持原有路由注册不变)
- app.include_router(vector.router, prefix="/api/vector", tags=["vector"])
- app.include_router(raster.router, prefix="/api/raster", tags=["raster"])
- app.include_router(cd_prediction.router, prefix="/api/cd-prediction", tags=["cd-prediction"])
- app.include_router(unit_grouping.router, prefix="/api/unit-grouping", tags=["unit-grouping"])
- app.include_router(water.router, prefix="/api/water", tags=["water"])
- app.include_router(agricultural_input.router, prefix="/api/agricultural-input", tags=["agricultural-input"])
- app.include_router(cd_flux_removal.router, prefix="/api/cd-flux-removal", tags=["cd-flux-removal"])
- @app.get("/")
- async def root():
- return {"message": "Welcome to the GIS Data Management API"}
- # 可选:添加健康检查端点
- @app.get("/health")
- async def health_check():
- return {"status": "healthy", "database": "connected"}
|