Files
zclaw_openfang/crates/zclaw-saas/src/knowledge/mod.rs
iven 7e4b787d5c fix(knowledge): deep audit — 18 bugs fixed across backend + frontend
CRITICAL:
- Migration permission seed WHERE name → WHERE id (matched 0 rows, all KB APIs broken)

HIGH:
- analytics_quality SQL alias + missing comma fix
- search() duplicate else block compile error
- chunk_content duplicate var declarations + type mismatch
- SQL invalid escape sequences
- delete_category missing rows_affected check

MEDIUM:
- analytics_overview hit_rate vs positive_feedback_rate separation
- analytics_quality GROUP BY kc.id,kc.name (same-name category merge)
- update_category handler trim + empty name validation
- update_item duplicate VALID_STATUSES inside transaction
- page_size max(1) lower bound in list handlers
- batch_create title/content/length validation
- embedding dispatch silent error → tracing::warn
- Version modal close clears detailItem state
- Search empty state distinguishes not-searched vs no-results
- Create modal cancel resets form
2026-04-02 19:07:42 +08:00

40 lines
2.2 KiB
Rust

//! 知识库模块 — 行业知识管理、RAG 检索、版本控制
pub mod types;
pub mod service;
pub mod handlers;
use axum::routing::{delete, get, patch, post, put};
pub fn routes() -> axum::Router<crate::state::AppState> {
axum::Router::new()
// 分类管理
.route("/api/v1/knowledge/categories", get(handlers::list_categories))
.route("/api/v1/knowledge/categories", post(handlers::create_category))
.route("/api/v1/knowledge/categories/{id}", put(handlers::update_category))
.route("/api/v1/knowledge/categories/{id}", delete(handlers::delete_category))
.route("/api/v1/knowledge/categories/{id}/items", get(handlers::list_category_items))
.route("/api/v1/knowledge/categories/reorder", patch(handlers::reorder_categories))
// 知识条目 CRUD
.route("/api/v1/knowledge/items", get(handlers::list_items))
.route("/api/v1/knowledge/items", post(handlers::create_item))
.route("/api/v1/knowledge/items/batch", post(handlers::batch_create_items))
.route("/api/v1/knowledge/items/import", post(handlers::import_items))
.route("/api/v1/knowledge/items/{id}", get(handlers::get_item))
.route("/api/v1/knowledge/items/{id}", put(handlers::update_item))
.route("/api/v1/knowledge/items/{id}", delete(handlers::delete_item))
// 版本控制
.route("/api/v1/knowledge/items/{id}/versions", get(handlers::list_versions))
.route("/api/v1/knowledge/items/{id}/versions/{v}", get(handlers::get_version))
.route("/api/v1/knowledge/items/{id}/rollback/{v}", post(handlers::rollback_version))
// 检索
.route("/api/v1/knowledge/search", post(handlers::search))
.route("/api/v1/knowledge/recommend", post(handlers::recommend))
// 分析看板
.route("/api/v1/knowledge/analytics/overview", get(handlers::analytics_overview))
.route("/api/v1/knowledge/analytics/trends", get(handlers::analytics_trends))
.route("/api/v1/knowledge/analytics/top-items", get(handlers::analytics_top_items))
.route("/api/v1/knowledge/analytics/quality", get(handlers::analytics_quality))
.route("/api/v1/knowledge/analytics/gaps", get(handlers::analytics_gaps))
}