Files
ai-ticket-platform/backend/apps/knowledge/api.py
2026-07-03 17:49:44 +08:00

84 lines
2.8 KiB
Python

from ninja import Router
from apps.accounts.api import require_permission
from apps.knowledge.models import KnowledgeBase, KnowledgeItem
from apps.knowledge.schemas import (
KnowledgeBaseIn,
KnowledgeBaseOut,
KnowledgeDocumentIn,
KnowledgeDocumentOut,
KnowledgeItemIn,
KnowledgeItemOut,
)
from apps.knowledge.services import ingest_document_text, rebuild_item_chunks
router = Router(tags=["knowledge"])
@router.post("/bases", response=KnowledgeBaseOut)
def create_knowledge_base(request, payload: KnowledgeBaseIn):
require_permission(request, "knowledge.manage")
return KnowledgeBase.objects.create(
name=payload.name,
description=payload.description,
scope=payload.scope,
enabled=payload.enabled,
created_by=request.user if request.user.is_authenticated else None,
)
@router.get("/bases", response=list[KnowledgeBaseOut])
def list_knowledge_bases(request, enabled: bool | None = None):
require_permission(request, "knowledge.view")
queryset = KnowledgeBase.objects.all()
if enabled is not None:
queryset = queryset.filter(enabled=enabled)
return queryset[:100]
@router.post("/items", response=KnowledgeItemOut)
def create_knowledge_item(request, payload: KnowledgeItemIn):
require_permission(request, "knowledge.manage")
item = KnowledgeItem.objects.create(
knowledge_base_id=payload.knowledge_base_id,
title=payload.title,
problem=payload.problem,
applicable_scope=payload.applicable_scope,
error_code=payload.error_code,
root_cause=payload.root_cause,
troubleshooting_steps=payload.troubleshooting_steps,
solution=payload.solution,
risk_note=payload.risk_note,
status=payload.status,
created_by=request.user if request.user.is_authenticated else None,
)
rebuild_item_chunks(item)
return item
@router.get("/items", response=list[KnowledgeItemOut])
def list_knowledge_items(
request,
knowledge_base_id: int | None = None,
status: str | None = None,
):
require_permission(request, "knowledge.view")
queryset = KnowledgeItem.objects.all()
if knowledge_base_id:
queryset = queryset.filter(knowledge_base_id=knowledge_base_id)
if status:
queryset = queryset.filter(status=status)
return queryset[:100]
@router.post("/documents", response=KnowledgeDocumentOut)
def create_knowledge_document(request, payload: KnowledgeDocumentIn):
require_permission(request, "knowledge.manage")
return ingest_document_text(
knowledge_base_id=payload.knowledge_base_id,
file_name=payload.file_name,
file_type=payload.file_type,
content=payload.content,
operator=request.user if request.user.is_authenticated else None,
)