handleTodoDelete handles todo deletion
(wsConn *WebSocketConnection, payload map[string]any)
| 725 | |
| 726 | // handleTodoDelete handles todo deletion |
| 727 | func (h *WebSocketHandler) handleTodoDelete(wsConn *WebSocketConnection, payload map[string]any) { |
| 728 | listName := "default" |
| 729 | if name, ok := payload["list_name"].(string); ok && name != "" { |
| 730 | listName = name |
| 731 | } |
| 732 | |
| 733 | todoID, ok := payload["id"].(string) |
| 734 | if !ok { |
| 735 | h.sendError(wsConn, "missing_todo_id", "todo id is required") |
| 736 | return |
| 737 | } |
| 738 | |
| 739 | // 加载任务列表 |
| 740 | todoList, err := h.todoManager.LoadTodoList(listName) |
| 741 | if err != nil { |
| 742 | h.sendError(wsConn, "list_not_found", fmt.Sprintf("Todo list '%s' not found", listName)) |
| 743 | return |
| 744 | } |
| 745 | |
| 746 | // 查找并删除任务 |
| 747 | deleted := false |
| 748 | for i, existingTodo := range todoList.Todos { |
| 749 | if existingTodo.ID == todoID { |
| 750 | todoList.Todos = append(todoList.Todos[:i], todoList.Todos[i+1:]...) |
| 751 | todoList.UpdatedAt = time.Now() |
| 752 | deleted = true |
| 753 | break |
| 754 | } |
| 755 | } |
| 756 | |
| 757 | if !deleted { |
| 758 | h.sendError(wsConn, "todo_not_found", fmt.Sprintf("Todo with id '%s' not found", todoID)) |
| 759 | return |
| 760 | } |
| 761 | |
| 762 | // 保存列表 |
| 763 | if err := h.todoManager.StoreTodoList(todoList); err != nil { |
| 764 | h.sendError(wsConn, "save_failed", fmt.Sprintf("Failed to save todo list: %v", err)) |
| 765 | return |
| 766 | } |
| 767 | |
| 768 | // 广播给所有连接 |
| 769 | h.broadcastToAll("todo_deleted", map[string]any{ |
| 770 | "id": todoID, |
| 771 | }) |
| 772 | } |
| 773 | |
| 774 | // handleToolControl 处理工具控制指令 |
| 775 | func (h *WebSocketHandler) handleToolControl(wsConn *WebSocketConnection, payload map[string]any) { |
no test coverage detected