smart-chatbot-api / app /routers /knowledge_base.py
GitHub Actions
Deploy from GitHub Actions (2026-03-15 12:10 UTC)
e5b256c
import uuid
from fastapi import APIRouter, Depends, HTTPException, Request
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.models.smart_models import KnowledgeBase
from app.schemas.knowledge_base import KBEntryCreate, KBEntryResponse, KBEntryUpdate
from app.models.database import get_db
router = APIRouter()
@router.post("/kb/entries", status_code=201, response_model=KBEntryResponse)
def create_entry(
request: Request, entry: KBEntryCreate, db: Session = Depends(get_db)
) -> KBEntryResponse:
knowledge_base = KnowledgeBase()
knowledge_base.tenant_id = (
request.state.tenant_id
) # get the tenant_id from the middleware
knowledge_base.entry = entry.entry # type: ignore[truthy-bool]
db.add(knowledge_base)
db.commit()
db.refresh(knowledge_base)
return knowledge_base
@router.get("/kb/entries/{entry_id}", status_code=200, response_model=KBEntryResponse)
def read_entry(
request: Request, entry_id: uuid.UUID, db: Session = Depends(get_db)
) -> KBEntryResponse:
tenant_id = request.state.tenant_id
kb = db.scalars(
select(KnowledgeBase).where(
KnowledgeBase.id == entry_id, KnowledgeBase.tenant_id == tenant_id
)
).first()
if kb is None:
raise HTTPException(status_code=404, detail="Entry not found")
return kb
@router.get("/kb/entries", status_code=200, response_model=list[KBEntryResponse])
def read_entries(
request: Request, db: Session = Depends(get_db)
) -> list[KBEntryResponse]:
tenant_id = request.state.tenant_id
kb_entries = db.scalars(
select(KnowledgeBase).where(KnowledgeBase.tenant_id == tenant_id)
).all()
return kb_entries # type: ignore[truthy-bool]
@router.put("/kb/entries/{entry_id}", status_code=200, response_model=KBEntryResponse)
def update_entry(
request: Request,
entry_id: uuid.UUID,
entry: KBEntryUpdate,
db: Session = Depends(get_db),
) -> KBEntryResponse:
tenant_id = request.state.tenant_id
kb = db.scalars(
select(KnowledgeBase).where(
KnowledgeBase.tenant_id == tenant_id, KnowledgeBase.id == entry_id
)
).first()
if kb is None:
raise HTTPException(status_code=404, detail="Entry not found")
kb.entry = entry.entry # type: ignore[truthy-bool]
db.commit()
db.refresh(kb)
return kb
@router.delete("/kb/entries/{entry_id}", status_code=204)
def delete_entry(
request: Request, entry_id: uuid.UUID, db: Session = Depends(get_db)
) -> None:
tenant_id = request.state.tenant_id
kb = db.scalars(
select(KnowledgeBase).where(
KnowledgeBase.id == entry_id, KnowledgeBase.tenant_id == tenant_id
)
).first()
if kb is None:
raise HTTPException(status_code=404, detail="Entry not found")
db.delete(kb)
db.commit()