snippet_view.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. """
  2. 知识片段视图路由
  3. """
  4. from fastapi import APIRouter, Depends, Query, Path, Body
  5. from typing import Optional
  6. from app.services.snippet_service import snippet_service
  7. from app.schemas.base import ResponseSchema, PaginatedResponseSchema
  8. from app.services.jwt_token import verify_token
  9. from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
  10. from pydantic import BaseModel
  11. router = APIRouter(prefix="/document/snippet", tags=["样本中心-知识片段"])
  12. security = HTTPBearer()
  13. # Schemas
  14. class SnippetCreate(BaseModel):
  15. collection_name: str
  16. doc_name: str = "手动添加"
  17. content: str
  18. meta_info: Optional[str] = None
  19. class SnippetUpdate(BaseModel):
  20. collection_name: str
  21. doc_name: Optional[str] = None
  22. content: str
  23. @router.get("", response_model=PaginatedResponseSchema)
  24. async def get_snippets(
  25. page: int = Query(1, ge=1),
  26. page_size: int = Query(10, ge=1),
  27. kb: Optional[str] = Query(None, description="知识库集合名称"),
  28. keyword: Optional[str] = Query(None),
  29. status: Optional[str] = Query(None),
  30. credentials: HTTPAuthorizationCredentials = Depends(security)
  31. ):
  32. """获取知识片段列表 (跨集合查询)"""
  33. items, meta = snippet_service.get_list(page, page_size, kb, keyword, status)
  34. return PaginatedResponseSchema(
  35. code=0,
  36. message="获取成功",
  37. data=items,
  38. meta=meta
  39. )
  40. @router.post("", response_model=ResponseSchema)
  41. async def create_snippet(
  42. payload: SnippetCreate,
  43. credentials: HTTPAuthorizationCredentials = Depends(security)
  44. ):
  45. """创建知识片段"""
  46. payload_token = verify_token(credentials.credentials)
  47. if not payload_token:
  48. return ResponseSchema(code=401, message="无效的访问令牌")
  49. data = snippet_service.create(payload)
  50. return ResponseSchema(code=0, message="创建成功", data=data)
  51. @router.post("/{id}", response_model=ResponseSchema)
  52. async def update_snippet(
  53. id: str,
  54. payload: SnippetUpdate,
  55. credentials: HTTPAuthorizationCredentials = Depends(security)
  56. ):
  57. """更新知识片段"""
  58. payload_token = verify_token(credentials.credentials)
  59. if not payload_token:
  60. return ResponseSchema(code=401, message="无效的访问令牌")
  61. msg = snippet_service.update(id, payload)
  62. return ResponseSchema(code=0, message=msg)
  63. @router.post("/{id}/delete", response_model=ResponseSchema)
  64. async def delete_snippet(
  65. id: str,
  66. kb: str = Query(..., description="知识库名称"),
  67. credentials: HTTPAuthorizationCredentials = Depends(security)
  68. ):
  69. """删除知识片段"""
  70. payload_token = verify_token(credentials.credentials)
  71. if not payload_token:
  72. return ResponseSchema(code=401, message="无效的访问令牌")
  73. snippet_service.delete(id, kb)
  74. return ResponseSchema(code=0, message="删除成功")