72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
"""
|
|
Django Ninja API configuration.
|
|
"""
|
|
from ninja import NinjaAPI
|
|
from ninja.errors import HttpError, ValidationError
|
|
from ninja_jwt.authentication import JWTAuth
|
|
|
|
# Import routers from apps
|
|
from apps.users.api import router as auth_router
|
|
from apps.users.friends import router as friends_router
|
|
from apps.products.api import router as products_router, category_router, website_router
|
|
from apps.bounties.api import router as bounties_router
|
|
from apps.bounties.payments import router as payments_router
|
|
from apps.favorites.api import router as favorites_router
|
|
from apps.notifications.api import router as notifications_router
|
|
from apps.admin.api import router as admin_router
|
|
from config.search import router as search_router
|
|
from apps.common.errors import build_error_payload
|
|
|
|
# Create main API instance
|
|
api = NinjaAPI(
|
|
title="AI Web API",
|
|
version="1.0.0",
|
|
description="Backend API for AI Web application",
|
|
)
|
|
|
|
|
|
@api.exception_handler(HttpError)
|
|
def on_http_error(request, exc: HttpError):
|
|
return api.create_response(
|
|
request,
|
|
build_error_payload(status_code=exc.status_code, message=str(exc)),
|
|
status=exc.status_code,
|
|
)
|
|
|
|
|
|
@api.exception_handler(ValidationError)
|
|
def on_validation_error(request, exc: ValidationError):
|
|
details = getattr(exc, "errors", None)
|
|
return api.create_response(
|
|
request,
|
|
build_error_payload(
|
|
status_code=400,
|
|
message="请求参数校验失败",
|
|
details=details,
|
|
code="validation_error",
|
|
),
|
|
status=400,
|
|
)
|
|
|
|
|
|
@api.exception_handler(Exception)
|
|
def on_unhandled_error(request, exc: Exception):
|
|
return api.create_response(
|
|
request,
|
|
build_error_payload(status_code=500, message="服务器内部错误"),
|
|
status=500,
|
|
)
|
|
|
|
# Register routers
|
|
api.add_router("/auth/", auth_router, tags=["认证"])
|
|
api.add_router("/friends/", friends_router, tags=["好友"])
|
|
api.add_router("/categories/", category_router, tags=["分类"])
|
|
api.add_router("/websites/", website_router, tags=["网站"])
|
|
api.add_router("/products/", products_router, tags=["商品"])
|
|
api.add_router("/bounties/", bounties_router, tags=["悬赏"])
|
|
api.add_router("/payments/", payments_router, tags=["支付"])
|
|
api.add_router("/favorites/", favorites_router, tags=["收藏"])
|
|
api.add_router("/notifications/", notifications_router, tags=["通知"])
|
|
api.add_router("/search/", search_router, tags=["搜索"])
|
|
api.add_router("/admin/", admin_router, tags=["后台"])
|