| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """
- 检索引擎视图路由
- """
- from fastapi import APIRouter, Depends, Query, Path, Body, Request
- from sqlalchemy.ext.asyncio import AsyncSession
- from app.base.async_mysql_connection import get_db
- from app.services.search_engine_service import search_engine_service
- from app.sample.schemas.search_engine import (
- SearchEngineCreate,
- SearchEngineUpdate,
- SearchEngineResponse,
- KBSearchRequest,
- KBSearchResponse
- )
- from app.schemas.base import PaginatedResponseSchema, ResponseSchema
- from app.services.jwt_token import verify_token
- from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
- from app.utils.auth_dependency import get_current_user_with_refresh
- router = APIRouter(prefix="/sample/search-engine", tags=["样本中心-检索引擎"])
- security = HTTPBearer()
- # --- 新增:知识库搜索接口 ---
- @router.post("/search", response_model=ResponseSchema)
- async def search_knowledge_base(
- payload: KBSearchRequest,
- db: AsyncSession = Depends(get_db),
- current_user: dict = Depends(get_current_user_with_refresh)
- ):
- """知识库语义搜索"""
- try:
- result = await search_engine_service.search_kb(db, payload)
- return ResponseSchema(code=0, message="搜索成功", data=result)
- except ValueError as e:
- return ResponseSchema(code=400, message=str(e), data=KBSearchResponse(results=[], total=0))
- except Exception:
- return ResponseSchema(code=500, message="搜索失败", data=KBSearchResponse(results=[], total=0))
- # --- 原有接口 ---
- @router.get("", response_model=PaginatedResponseSchema)
- async def get_search_engines(
- page: int = Query(1, ge=1, description="页码"),
- page_size: int = Query(10, ge=1, le=1000, description="每页数量"),
- keyword: str = Query(None, description="搜索关键词"),
- status: str = Query(None, description="状态筛选"),
- db: AsyncSession = Depends(get_db),
- current_user: dict = Depends(get_current_user_with_refresh)
- ):
- """获取检索引擎列表"""
- items, meta = await search_engine_service.get_list(
- db, page=page, page_size=page_size, keyword=keyword, status=status
- )
- return PaginatedResponseSchema(
- code=0,
- message="获取检索引擎列表成功",
- data=[SearchEngineResponse.model_validate(item) for item in items],
- meta=meta,
- )
- @router.post("", response_model=ResponseSchema)
- async def create_search_engine(
- payload: SearchEngineCreate,
- db: AsyncSession = Depends(get_db),
- current_user: dict = Depends(get_current_user_with_refresh)
- ):
- """创建新检索引擎"""
- new_engine = await search_engine_service.create(db, payload)
- return ResponseSchema(code=0, message="创建成功", data=SearchEngineResponse.model_validate(new_engine))
- @router.post("/{id}", response_model=ResponseSchema)
- async def update_search_engine(
- payload: SearchEngineUpdate,
- id: str = Path(..., description="检索引擎ID"),
- db: AsyncSession = Depends(get_db),
- current_user: dict = Depends(get_current_user_with_refresh)
- ):
- """更新检索引擎信息"""
- engine = await search_engine_service.update(db, id, payload)
- return ResponseSchema(code=0, message="更新成功", data=SearchEngineResponse.model_validate(engine))
- @router.post("/{id}/status", response_model=ResponseSchema)
- async def update_search_engine_status(
- id: str = Path(..., description="检索引擎ID"),
- status: str = Query(..., description="状态: normal/disabled"),
- db: AsyncSession = Depends(get_db),
- current_user: dict = Depends(get_current_user_with_refresh)
- ):
- """更新检索引擎状态"""
- await search_engine_service.update_status(db, id, status)
- return ResponseSchema(code=0, message=f"状态已更新为 {status}")
- @router.post("/{id}/delete", response_model=ResponseSchema)
- async def delete_search_engine(
- id: str = Path(..., description="检索引擎ID"),
- db: AsyncSession = Depends(get_db),
- current_user: dict = Depends(get_current_user_with_refresh)
- ):
- """删除检索引擎"""
- await search_engine_service.delete(db, id)
- return ResponseSchema(code=0, message="删除成功")
|