63 lines
2.3 KiB
TypeScript
63 lines
2.3 KiB
TypeScript
import { invoke } from '@tauri-apps/api/core'
|
|
import type { TaskRecord, CreateTaskInput, TaskQuery, TaskTreeNode, TaskDeleteResult } from './types'
|
|
|
|
export const taskApi = {
|
|
/**
|
|
* 列出任务。
|
|
*
|
|
* **双签名向后兼容**
|
|
* - `list(projectId?)`:旧签名,仅项目过滤(等价 `list({ project_id: projectId })`)。
|
|
* - `list(query?)`:新签名,多条件(status/keyword/project_id/priority/assignee/...)走后端 WHERE。
|
|
*
|
|
* 参数为空 → 后端返回全量未删任务(created_at DESC,等价改造前 list_active)。
|
|
*/
|
|
list(queryOrProjectId?: TaskQuery | string): Promise<TaskRecord[]> {
|
|
if (typeof queryOrProjectId === 'string') {
|
|
return invoke('list_tasks', { projectId: queryOrProjectId ?? null, query: null })
|
|
}
|
|
return invoke('list_tasks', { projectId: null, query: queryOrProjectId ?? null })
|
|
},
|
|
|
|
/** 按条件计数任务(分页 total 用)。 */
|
|
count(query?: TaskQuery): Promise<number> {
|
|
return invoke('count_tasks', { query: query ?? null })
|
|
},
|
|
|
|
get(id: string): Promise<TaskRecord> {
|
|
return invoke('get_task_by_id', { id })
|
|
},
|
|
|
|
create(input: CreateTaskInput): Promise<TaskRecord> {
|
|
return invoke('create_task', { input })
|
|
},
|
|
|
|
update(id: string, field: string, value: string): Promise<boolean> {
|
|
return invoke('update_task', { id, field, value })
|
|
},
|
|
|
|
/**
|
|
* 删除任务。后端 delete_task 现为级联软删:删除父任务时一并软删其子任务
|
|
* (返回 TaskDeleteResult.ok + cascaded 子任务数);删除子任务仅删自身。
|
|
*/
|
|
delete(id: string): Promise<TaskDeleteResult> {
|
|
return invoke('delete_task', { id })
|
|
},
|
|
|
|
/**
|
|
* 获取任务树(父子任务,1 级嵌套,无孙任务)。
|
|
* 后端 get_task_tree 按 parentId 返回 TaskTreeNode(parent + 直接 children)。
|
|
*/
|
|
getTree(id: string): Promise<TaskTreeNode> {
|
|
return invoke('get_task_tree', { parentId: id })
|
|
},
|
|
|
|
/**
|
|
* F-05 推进任务状态(走后端 advance_task 状态机:df-nodes task_advance_node)。
|
|
* 后端校验 from→to 合法性(can_transition)+ review_rounds 自动累加(退回时),
|
|
* 前端只传 target_status,不自行判状态机(单一真相源在后端)。
|
|
*/
|
|
advance(id: string, targetStatus: string): Promise<TaskRecord> {
|
|
return invoke('advance_task', { id, targetStatus })
|
|
},
|
|
}
|