新增: 三实体列表查询维度补全(status/关键词/排序/分页下沉后端)
任务/项目/灵感三实体新增 list_by_query 动态 WHERE(累积式 where_clauses
+params_vec 收口)+ order_by 白名单防注入 + limit/offset 钳制。命令层
list_{tasks,projects,ideas} 吃 Option<XxxQuery> 双参向后兼容(旧无参/单参
路径等价全量)。前端 Tasks/Ideas status/keyword 筛选下沉后端 query。
F-260621-02
This commit is contained in:
@@ -17,6 +17,7 @@ use df_project::scan::{
|
||||
collect_sample, detect_stack, discover_projects, extract_description,
|
||||
normalize_path, DiscoveredProject,
|
||||
};
|
||||
use df_storage::crud::ProjectQuery;
|
||||
use df_storage::models::ProjectRecord;
|
||||
|
||||
use crate::state::AppState;
|
||||
@@ -38,10 +39,27 @@ pub struct CreateProjectInput {
|
||||
pub stack: Option<String>,
|
||||
}
|
||||
|
||||
/// 列出未删除项目(过滤回收站)
|
||||
/// 列出未删除项目(过滤回收站)。
|
||||
///
|
||||
/// F-260621-02:吃可选 query(关键词/排序/分页),向后兼容——不传(或 None)走 list_active
|
||||
/// 全量(deleted_at IS NULL + created_at DESC),零破坏;传 query 走 list_by_query 动态 WHERE。
|
||||
#[tauri::command]
|
||||
pub async fn list_projects(state: State<'_, AppState>) -> Result<Vec<ProjectRecord>, String> {
|
||||
state.projects.list_active().await.map_err(err_str)
|
||||
pub async fn list_projects(
|
||||
state: State<'_, AppState>,
|
||||
query: Option<ProjectQuery>,
|
||||
) -> Result<Vec<ProjectRecord>, String> {
|
||||
match query {
|
||||
// None 或全空 query(trim 后 keyword 空 + 无 order_by/limit/offset)→ 走 list_active,
|
||||
// 与历史行为完全等价(列表上 list_by_query 空也等价,但保留 list_active 分支明示向后兼容契约)。
|
||||
Some(q) if q.keyword.as_deref().map(str::trim).is_some_and(|k| !k.is_empty())
|
||||
|| q.order_by.is_some()
|
||||
|| q.limit.is_some()
|
||||
|| q.offset.is_some() =>
|
||||
{
|
||||
state.projects.list_by_query(q).await.map_err(err_str)
|
||||
}
|
||||
_ => state.projects.list_active().await.map_err(err_str),
|
||||
}
|
||||
}
|
||||
|
||||
/// 创建项目,返回完整记录
|
||||
|
||||
Reference in New Issue
Block a user