deliveryman-api/app/main.py
2025-03-11 08:59:27 +08:00

142 lines
6.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api.endpoints import wechat,user, address, community, station, order, coupon, community_building, upload, merchant, merchant_product, merchant_order, point, config, merchant_category, log, account,merchant_pay_order, message, bank_card, withdraw, mp, point_product, point_product_order, coupon_activity, dashboard, wecom, feedback, timeperiod, community_timeperiod, order_additional_fee, ai, community_set, community_set_mapping, community_profit_sharing, partner, health, scheduler, statistics
from app.models.database import Base, engine
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from app.core.response import error_response
from fastapi import HTTPException
from app.middleware.request_logger import RequestLoggerMiddleware
from app.core.response import CustomJSONResponse
import logging
from app.core.config import settings
from app.core.wecombot import WecomBot
from app.api.endpoints import wecom
from app.api.endpoints import feedback
from starlette.middleware.sessions import SessionMiddleware
import os
from app.core.db_monitor import setup_db_monitor
from app.tasks import init_scheduler
from contextlib import asynccontextmanager
# 创建数据库表
Base.metadata.create_all(bind=engine)
# 定义应用生命周期上下文管理器
@asynccontextmanager
async def lifespan(app: FastAPI):
# 启动时执行
# 初始化并启动任务调度器
init_scheduler()
yield # 应用运行期间
# 关闭时执行
# 关闭任务调度器
from app.core.scheduler import scheduler
scheduler.shutdown()
app = FastAPI(
title="Beefast 蜂快到家",
description="API 文档",
version="1.0.0",
docs_url="/docs" if settings.DEBUG else None,
lifespan=lifespan # 使用lifespan上下文管理器
)
# 设置数据库连接监控
setup_db_monitor(app)
app.default_response_class = CustomJSONResponse
# 配置 CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 添加请求日志中间件
app.add_middleware(RequestLoggerMiddleware)
app.add_middleware(SessionMiddleware, secret_key=settings.SECRET_KEY)
# 添加定时任务路由
app.include_router(scheduler.router, prefix="/api/scheduler", tags=["定时任务管理"])
# 添加其他路由
app.include_router(ai.router, prefix="/api/ai", tags=["AI服务"])
app.include_router(dashboard.router, prefix="/api/dashboard", tags=["仪表盘"])
app.include_router(wechat.router,prefix="/api/wechat",tags=["微信"])
app.include_router(mp.router, prefix="/api/mp", tags=["微信公众号"])
app.include_router(wecom.router, prefix="/api/wecom", tags=["企业微信"])
app.include_router(partner.router, prefix="/api/partner", tags=["合伙人"])
app.include_router(user.router, prefix="/api/user", tags=["用户"])
app.include_router(bank_card.router, prefix="/api/bank-cards", tags=["用户银行卡"])
app.include_router(withdraw.router, prefix="/api/withdraw", tags=["提现"])
app.include_router(point.router, prefix="/api/point", tags=["用户积分"])
app.include_router(point_product.router, prefix="/api/point-products", tags=["积分商品"])
app.include_router(point_product_order.router, prefix="/api/point-product-orders", tags=["积分商品订单"])
app.include_router(account.router, prefix="/api/account", tags=["账户"])
app.include_router(address.router, prefix="/api/address", tags=["配送地址"])
app.include_router(community.router, prefix="/api/community", tags=["社区"])
app.include_router(community_set.router, prefix="/api/community-sets", tags=["社区集合"])
app.include_router(community_set_mapping.router, prefix="/api/community-set-mappings", tags=["社区集合映射"])
app.include_router(community_profit_sharing.router, prefix="/api/community-profit-sharings", tags=["社区分润"])
app.include_router(timeperiod.router, prefix="/api/time-periods", tags=["配送时段"])
app.include_router(community_timeperiod.router, prefix="/api/community-time-periods", tags=["社区配送时段"])
app.include_router(community_building.router, prefix="/api/community/building", tags=["社区楼栋"])
app.include_router(station.router, prefix="/api/station", tags=["驿站"])
app.include_router(order.router, prefix="/api/order", tags=["订单"])
app.include_router(order_additional_fee.router, prefix="/api/order-additional-fee", tags=["订单加价"])
app.include_router(coupon.router, prefix="/api/coupon", tags=["抵扣券"])
app.include_router(coupon_activity.router, prefix="/api/coupon-activities", tags=["抵扣券活动"])
app.include_router(merchant.router, prefix="/api/merchant", tags=["商家"])
app.include_router(merchant_category.router, prefix="/api/merchant-categories", tags=["商家分类"])
app.include_router(merchant_product.router, prefix="/api/merchant/product", tags=["商家产品"])
app.include_router(merchant_order.router, prefix="/api/merchant/order", tags=["商家订单"])
app.include_router(merchant_pay_order.router,prefix="/api/merchant-pay",tags=["商家在线买单"])
app.include_router(message.router, prefix="/api/message", tags=["消息中心"])
app.include_router(upload.router, prefix="/api/upload", tags=["文件上传"])
app.include_router(config.router, prefix="/api/config", tags=["系统配置"])
app.include_router(log.router, prefix="/api/logs", tags=["系统日志"])
app.include_router(feedback.router, prefix="/api/feedback", tags=["反馈"])
app.include_router(health.router, prefix="/api/health", tags=["系统健康检查"])
app.include_router(statistics.router, prefix="/api/statistics", tags=["统计数据"])
@app.get("/")
async def root():
return {"message": "欢迎使用 Beefast 蜂快到家 API"}
@app.exception_handler(Exception)
async def exception_handler(request, exc):
env = "测试环境" if settings.DEBUG else "生产环境"
logging.exception(f"{env}】API异常: {str(exc)}")
# 发送企业微信消息
wecom_bot = WecomBot(settings.URL_WECOMBOT_SYS_EXCEPTION)
env = os.getenv("APP_ENV", "dev").lower()
exception_log = f"""{env}环境**API异常**
**请求信息**
> 请求方法:{request.method}
> 请求URL{request.url}
> 请求体:{request.body}
**异常信息**
{str(exc)}
"""
await wecom_bot.send_markdown(exception_log)
return CustomJSONResponse(
status_code=500,
content={
"code": 500,
"message": str(exc)
}
)