feat: add knowledge base core api
This commit is contained in:
83
backend/apps/knowledge/api.py
Normal file
83
backend/apps/knowledge/api.py
Normal file
@@ -0,0 +1,83 @@
|
||||
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,
|
||||
)
|
||||
Reference in New Issue
Block a user