Archive
This commit is contained in:
1 parent
206997510c
commit
251bd3e65f
14 files changed
+836
No files matched your search
@@ -0,0 +1,14 @@
|
||||
quadrantChart
|
||||
title "命令行TODO工具竞争力分析"
|
||||
x-axis "功能简单" --> "功能丰富"
|
||||
y-axis "易用性低" --> "易用性高"
|
||||
quadrant-1 "功能丰富且易用"
|
||||
quadrant-2 "功能简单但易用"
|
||||
quadrant-3 "功能简单且难用"
|
||||
quadrant-4 "功能丰富但难用"
|
||||
"Todo.txt CLI": [0.3, 0.7]
|
||||
"Taskwarrior": [0.8, 0.3]
|
||||
"t": [0.2, 0.6]
|
||||
"GitHub Issues CLI": [0.7, 0.4]
|
||||
"Microsoft To Do CLI": [0.5, 0.5]
|
||||
"Our Target Product": [0.4, 0.8]
|
||||
@@ -0,0 +1,50 @@
|
||||
classDiagram
|
||||
class TodoItem {
|
||||
-int id
|
||||
-str title
|
||||
-str description
|
||||
-str due_date
|
||||
-bool completed
|
||||
-str created_at
|
||||
+__init__(id: int, title: str, description: str = "", due_date: str = "", completed: bool = False, created_at: str = "")
|
||||
+to_dict() dict
|
||||
+from_dict(data: dict) TodoItem
|
||||
}
|
||||
class Storage {
|
||||
-str file_path
|
||||
+__init__(file_path: str)
|
||||
+load() list[dict]
|
||||
+save(data: list[dict]) None
|
||||
}
|
||||
class TodoManager {
|
||||
-list[TodoItem] items
|
||||
-Storage storage
|
||||
-int next_id
|
||||
+__init__(storage: Storage)
|
||||
+add(title: str, description: str = "", due_date: str = "") TodoItem
|
||||
+list_all() list[TodoItem]
|
||||
+list_by_status(completed: bool) list[TodoItem]
|
||||
+mark_done(item_id: int) bool
|
||||
+mark_undone(item_id: int) bool
|
||||
+delete(item_id: int) bool
|
||||
+edit(item_id: int, title: str = None, description: str = None, due_date: str = None, completed: bool = None) bool
|
||||
+_load() None
|
||||
+_save() None
|
||||
+_find_by_id(item_id: int) TodoItem | None
|
||||
}
|
||||
class TodoCLI {
|
||||
-TodoManager manager
|
||||
-argparse.ArgumentParser parser
|
||||
+__init__(manager: TodoManager)
|
||||
+run(args: list[str] = None) None
|
||||
+_setup_parser() None
|
||||
+_handle_add(args) None
|
||||
+_handle_list(args) None
|
||||
+_handle_done(args) None
|
||||
+_handle_delete(args) None
|
||||
+_handle_edit(args) None
|
||||
}
|
||||
TodoCLI --> TodoManager
|
||||
TodoManager --> Storage
|
||||
TodoManager --> TodoItem
|
||||
Storage ..> TodoItem : uses to_dict/from_dict
|
||||
@@ -0,0 +1,75 @@
|
||||
## Language
|
||||
|
||||
zh_cn
|
||||
|
||||
## Programming Language
|
||||
|
||||
Python
|
||||
|
||||
## Original Requirements
|
||||
|
||||
创建一个Python命令行TODO应用,支持增删改查,数据存JSON文件
|
||||
|
||||
## Project Name
|
||||
|
||||
todo_cli
|
||||
|
||||
## Product Goals
|
||||
|
||||
- 提供简洁高效的命令行交互体验
|
||||
- 确保数据持久化与可靠性
|
||||
- 支持快速增删改查操作
|
||||
|
||||
## User Stories
|
||||
|
||||
- 作为用户,我希望能够通过命令行快速添加新的待办事项
|
||||
- 作为用户,我希望能够查看所有待办事项及其完成状态
|
||||
- 作为用户,我希望能够标记待办事项为已完成
|
||||
- 作为用户,我希望能够删除不再需要的待办事项
|
||||
- 作为用户,我希望能够修改已有待办事项的内容
|
||||
|
||||
## Competitive Analysis
|
||||
|
||||
- Todo.txt CLI: 纯文本文件存储,支持标签和优先级,但无JSON格式
|
||||
- Taskwarrior: 功能强大的命令行任务管理,但学习曲线较陡
|
||||
- t: 轻量级TODO工具,使用JSON存储,但功能单一
|
||||
- GitHub Issues CLI: 与GitHub集成,不适合本地简单使用
|
||||
- Microsoft To Do CLI: 非官方,依赖云服务,离线不可用
|
||||
|
||||
## Competitive Quadrant Chart
|
||||
|
||||
quadrantChart
|
||||
title "命令行TODO工具竞争力分析"
|
||||
x-axis "功能简单" --> "功能丰富"
|
||||
y-axis "易用性低" --> "易用性高"
|
||||
quadrant-1 "功能丰富且易用"
|
||||
quadrant-2 "功能简单但易用"
|
||||
quadrant-3 "功能简单且难用"
|
||||
quadrant-4 "功能丰富但难用"
|
||||
"Todo.txt CLI": [0.3, 0.7]
|
||||
"Taskwarrior": [0.8, 0.3]
|
||||
"t": [0.2, 0.6]
|
||||
"GitHub Issues CLI": [0.7, 0.4]
|
||||
"Microsoft To Do CLI": [0.5, 0.5]
|
||||
"Our Target Product": [0.4, 0.8]
|
||||
|
||||
## Requirement Analysis
|
||||
|
||||
本项目要求开发一个Python命令行TODO应用,核心功能包括增删改查(CRUD),数据以JSON文件形式持久化存储。用户通过命令行参数或交互式菜单操作。需要支持:添加任务(标题、描述、截止日期等可选字段)、列出所有任务(可筛选状态)、标记完成/未完成、删除任务、编辑任务内容。数据存储于本地JSON文件,需处理文件读写异常。命令行界面应清晰易用,提供帮助信息。
|
||||
|
||||
## Requirement Pool
|
||||
|
||||
- ['P0', '实现添加待办事项功能,支持输入标题,可选描述和截止日期']
|
||||
- ['P0', '实现查看所有待办事项列表,显示ID、标题、状态、创建时间等']
|
||||
- ['P0', '实现删除待办事项功能,通过ID或索引删除']
|
||||
- ['P0', '实现修改待办事项功能,支持更新标题、描述、截止日期、状态']
|
||||
- ['P1', '实现数据持久化,使用JSON文件存储,支持自动加载和保存']
|
||||
|
||||
## UI Design draft
|
||||
|
||||
命令行界面,无图形UI。用户通过命令参数操作,例如:todo add "任务标题" -d "描述" -due 2025-01-01;todo list [--all|--done|--pending];todo done <id>;todo delete <id>;todo edit <id> --title "新标题"。支持--help查看帮助。输出格式为表格或列表,清晰显示任务信息。
|
||||
|
||||
## Anything UNCLEAR
|
||||
|
||||
无
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
sequenceDiagram
|
||||
participant User as 用户
|
||||
participant CLI as TodoCLI
|
||||
participant Manager as TodoManager
|
||||
participant Storage as Storage
|
||||
participant File as JSON文件
|
||||
User->>CLI: python main.py add "任务标题" -d "描述" -due 2025-01-01
|
||||
CLI->>CLI: _setup_parser() 解析参数
|
||||
CLI->>CLI: _handle_add(args)
|
||||
CLI->>Manager: add(title, description, due_date)
|
||||
Manager->>Manager: 生成新TodoItem,设置id=next_id
|
||||
Manager->>Manager: 将item加入items列表
|
||||
Manager->>Manager: _save()
|
||||
Manager->>Storage: save([item.to_dict() for item in items])
|
||||
Storage->>File: 写入JSON文件
|
||||
File-->>Storage: 成功
|
||||
Storage-->>Manager: None
|
||||
Manager-->>CLI: 返回新TodoItem
|
||||
CLI-->>User: 打印添加成功信息
|
||||
|
||||
User->>CLI: python main.py list
|
||||
CLI->>CLI: _handle_list(args)
|
||||
CLI->>Manager: list_all()
|
||||
Manager->>Manager: 返回items列表
|
||||
Manager-->>CLI: list[TodoItem]
|
||||
CLI->>CLI: 格式化输出表格
|
||||
CLI-->>User: 显示所有任务
|
||||
|
||||
User->>CLI: python main.py done 1
|
||||
CLI->>CLI: _handle_done(args)
|
||||
CLI->>Manager: mark_done(1)
|
||||
Manager->>Manager: _find_by_id(1) -> item
|
||||
Manager->>Manager: item.completed = True
|
||||
Manager->>Manager: _save()
|
||||
Manager-->>CLI: True
|
||||
CLI-->>User: 打印标记成功
|
||||
|
||||
User->>CLI: python main.py delete 1
|
||||
CLI->>CLI: _handle_delete(args)
|
||||
CLI->>Manager: delete(1)
|
||||
Manager->>Manager: _find_by_id(1) -> item
|
||||
Manager->>Manager: 从items中移除
|
||||
Manager->>Manager: _save()
|
||||
Manager-->>CLI: True
|
||||
CLI-->>User: 打印删除成功
|
||||
|
||||
User->>CLI: python main.py edit 1 --title "新标题" --description "新描述"
|
||||
CLI->>CLI: _handle_edit(args)
|
||||
CLI->>Manager: edit(1, title="新标题", description="新描述")
|
||||
Manager->>Manager: _find_by_id(1) -> item
|
||||
Manager->>Manager: 更新item属性
|
||||
Manager->>Manager: _save()
|
||||
Manager-->>CLI: True
|
||||
CLI-->>User: 打印编辑成功
|
||||
@@ -0,0 +1,126 @@
|
||||
## Implementation approach
|
||||
|
||||
本项目使用Python标准库实现,无需第三方依赖。命令行参数解析采用argparse模块,数据持久化使用json模块,文件存储于用户主目录下的.todo_cli/todos.json。核心逻辑封装在TodoManager类中,提供增删改查方法。CLI接口通过TodoCLI类处理用户输入并调用TodoManager。数据模型TodoItem使用dataclass简化定义。整体设计遵循单一职责原则,确保代码简洁可维护。
|
||||
|
||||
## File list
|
||||
|
||||
- main.py
|
||||
- todo.py
|
||||
- storage.py
|
||||
|
||||
## Data structures and interfaces
|
||||
|
||||
classDiagram
|
||||
class TodoItem {
|
||||
-int id
|
||||
-str title
|
||||
-str description
|
||||
-str due_date
|
||||
-bool completed
|
||||
-str created_at
|
||||
+__init__(id: int, title: str, description: str = "", due_date: str = "", completed: bool = False, created_at: str = "")
|
||||
+to_dict() dict
|
||||
+from_dict(data: dict) TodoItem
|
||||
}
|
||||
class Storage {
|
||||
-str file_path
|
||||
+__init__(file_path: str)
|
||||
+load() list[dict]
|
||||
+save(data: list[dict]) None
|
||||
}
|
||||
class TodoManager {
|
||||
-list[TodoItem] items
|
||||
-Storage storage
|
||||
-int next_id
|
||||
+__init__(storage: Storage)
|
||||
+add(title: str, description: str = "", due_date: str = "") TodoItem
|
||||
+list_all() list[TodoItem]
|
||||
+list_by_status(completed: bool) list[TodoItem]
|
||||
+mark_done(item_id: int) bool
|
||||
+mark_undone(item_id: int) bool
|
||||
+delete(item_id: int) bool
|
||||
+edit(item_id: int, title: str = None, description: str = None, due_date: str = None, completed: bool = None) bool
|
||||
+_load() None
|
||||
+_save() None
|
||||
+_find_by_id(item_id: int) TodoItem | None
|
||||
}
|
||||
class TodoCLI {
|
||||
-TodoManager manager
|
||||
-argparse.ArgumentParser parser
|
||||
+__init__(manager: TodoManager)
|
||||
+run(args: list[str] = None) None
|
||||
+_setup_parser() None
|
||||
+_handle_add(args) None
|
||||
+_handle_list(args) None
|
||||
+_handle_done(args) None
|
||||
+_handle_delete(args) None
|
||||
+_handle_edit(args) None
|
||||
}
|
||||
TodoCLI --> TodoManager
|
||||
TodoManager --> Storage
|
||||
TodoManager --> TodoItem
|
||||
Storage ..> TodoItem : uses to_dict/from_dict
|
||||
|
||||
|
||||
## Program call flow
|
||||
|
||||
sequenceDiagram
|
||||
participant User as 用户
|
||||
participant CLI as TodoCLI
|
||||
participant Manager as TodoManager
|
||||
participant Storage as Storage
|
||||
participant File as JSON文件
|
||||
User->>CLI: python main.py add "任务标题" -d "描述" -due 2025-01-01
|
||||
CLI->>CLI: _setup_parser() 解析参数
|
||||
CLI->>CLI: _handle_add(args)
|
||||
CLI->>Manager: add(title, description, due_date)
|
||||
Manager->>Manager: 生成新TodoItem,设置id=next_id
|
||||
Manager->>Manager: 将item加入items列表
|
||||
Manager->>Manager: _save()
|
||||
Manager->>Storage: save([item.to_dict() for item in items])
|
||||
Storage->>File: 写入JSON文件
|
||||
File-->>Storage: 成功
|
||||
Storage-->>Manager: None
|
||||
Manager-->>CLI: 返回新TodoItem
|
||||
CLI-->>User: 打印添加成功信息
|
||||
|
||||
User->>CLI: python main.py list
|
||||
CLI->>CLI: _handle_list(args)
|
||||
CLI->>Manager: list_all()
|
||||
Manager->>Manager: 返回items列表
|
||||
Manager-->>CLI: list[TodoItem]
|
||||
CLI->>CLI: 格式化输出表格
|
||||
CLI-->>User: 显示所有任务
|
||||
|
||||
User->>CLI: python main.py done 1
|
||||
CLI->>CLI: _handle_done(args)
|
||||
CLI->>Manager: mark_done(1)
|
||||
Manager->>Manager: _find_by_id(1) -> item
|
||||
Manager->>Manager: item.completed = True
|
||||
Manager->>Manager: _save()
|
||||
Manager-->>CLI: True
|
||||
CLI-->>User: 打印标记成功
|
||||
|
||||
User->>CLI: python main.py delete 1
|
||||
CLI->>CLI: _handle_delete(args)
|
||||
CLI->>Manager: delete(1)
|
||||
Manager->>Manager: _find_by_id(1) -> item
|
||||
Manager->>Manager: 从items中移除
|
||||
Manager->>Manager: _save()
|
||||
Manager-->>CLI: True
|
||||
CLI-->>User: 打印删除成功
|
||||
|
||||
User->>CLI: python main.py edit 1 --title "新标题" --description "新描述"
|
||||
CLI->>CLI: _handle_edit(args)
|
||||
CLI->>Manager: edit(1, title="新标题", description="新描述")
|
||||
Manager->>Manager: _find_by_id(1) -> item
|
||||
Manager->>Manager: 更新item属性
|
||||
Manager->>Manager: _save()
|
||||
Manager-->>CLI: True
|
||||
CLI-->>User: 打印编辑成功
|
||||
|
||||
|
||||
## Anything UNCLEAR
|
||||
|
||||
无
|
||||
|
||||
Reference in new issue
Block a user