Spaces:
Running
Running
| 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() | |
| 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 | |
| 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 | |
| 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] | |
| 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 | |
| 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() | |