| 489 | * Delete a knowledge base (soft delete) |
| 490 | */ |
| 491 | export async function deleteKnowledgeBase( |
| 492 | knowledgeBaseId: string, |
| 493 | requestId: string |
| 494 | ): Promise<void> { |
| 495 | const now = new Date() |
| 496 | |
| 497 | await db.transaction(async (tx) => { |
| 498 | await tx.execute(sql`SELECT 1 FROM knowledge_base WHERE id = ${knowledgeBaseId} FOR UPDATE`) |
| 499 | |
| 500 | await tx |
| 501 | .update(knowledgeBase) |
| 502 | .set({ |
| 503 | deletedAt: now, |
| 504 | updatedAt: now, |
| 505 | }) |
| 506 | .where(and(eq(knowledgeBase.id, knowledgeBaseId), isNull(knowledgeBase.deletedAt))) |
| 507 | |
| 508 | await tx |
| 509 | .update(document) |
| 510 | .set({ |
| 511 | archivedAt: now, |
| 512 | }) |
| 513 | .where( |
| 514 | and( |
| 515 | eq(document.knowledgeBaseId, knowledgeBaseId), |
| 516 | isNull(document.archivedAt), |
| 517 | isNull(document.deletedAt) |
| 518 | ) |
| 519 | ) |
| 520 | |
| 521 | await tx |
| 522 | .update(knowledgeConnector) |
| 523 | .set({ |
| 524 | archivedAt: now, |
| 525 | status: 'paused', |
| 526 | updatedAt: now, |
| 527 | }) |
| 528 | .where( |
| 529 | and( |
| 530 | eq(knowledgeConnector.knowledgeBaseId, knowledgeBaseId), |
| 531 | isNull(knowledgeConnector.archivedAt), |
| 532 | isNull(knowledgeConnector.deletedAt) |
| 533 | ) |
| 534 | ) |
| 535 | }) |
| 536 | |
| 537 | logger.info(`[${requestId}] Soft deleted knowledge base: ${knowledgeBaseId}`) |
| 538 | } |
| 539 | |
| 540 | /** |
| 541 | * Restore a soft-deleted knowledge base and its graph children. |