TodoList设计

这是创新实践课程的作业,做一个简单的TodoList应用,借这个机会把整个业务开发的流程熟悉一遍。

需求分析

功能调研

TODO 应用通常是一个帮助用户管理日常任务的工具,用户可以在其中创建、查看、编辑、删除任务,并通过标记任务状态来追踪进度。常见的功能包括:

  1. 创建任务:允许用户输入任务标题、描述、优先级、截止日期等信息。
  2. 查看任务:展示所有任务,并按状态(如已完成、未完成)进行过滤。
  3. 编辑任务:让用户修改任务的内容、截止日期等。
  4. 删除任务:删除已不再需要的任务。
  5. 标记任务完成/未完成:允许用户标记任务的完成状态,帮助跟踪进度。

此外,一些TODO应用还可能包括任务提醒、优先级设置、任务分类、搜索功能等扩展功能。

核心功能

这些是项目的基本功能,优先实现基本功能,扩展功能之后再说。

  1. 创建任务:用户可以添加新的任务,任务包含标题、描述和截止日期(可选)。任务可以标记为已完成或未完成。
    • 输入框:任务标题、任务描述、截止日期。
    • 按钮:保存、取消。
  2. 查看任务:用户可以查看所有任务,并过滤选项:全部任务、未完成任务、已完成任务。。
    • 列表展示:任务标题、描述、状态、截止日期。
    • 过滤选项:全部任务、未完成任务、已完成任务。
  3. 编辑任务:用户可以修改已创建的任务,包括修改标题、描述、截止日期。
    • 编辑按钮:任务列表中的每个任务旁边都有一个编辑按钮,复用创建窗口。
  4. 删除任务:用户可以删除不再需要的任务。
    • 删除按钮:任务列表中的每个任务旁边都有一个删除按钮,用户需确认是否删除。
  5. 标记完成/未完成:用户可以将任务标记为“完成”或“未完成”状态。
    • 完成按钮:标记任务状态的交互元素。

原型设计

web网页版 Todo List 主页面 左边是导航栏 右边是任务列表,每条任务包含任务标题,距离截止的时间,完成圆圈,编辑按钮,删除按钮

任务列表,一条一条的任务,包含任务标题,距离截止的时间,完成圆圈,编辑按钮,删除按钮

搜索框(请输入想查找的任务)

新增任务的加号按钮

页面原型

TODO 应用 API 文档

1. 创建任务

  • 请求类型POST
  • 请求路径/api/tasks
  • 请求参数
    • title(必填):任务标题(字符串,最大长度 255)
    • description(可选):任务描述(字符串)
    • dueDate(可选):任务截止日期(ISO 8601 格式字符串,如:2024-12-25T12:00:00Z
    • status(可选):任务状态,默认值为 pendingpendingcompleted
    • priority(可选):任务优先级(字符串,可选值:lowmediumhigh
  • 请求示例
{
"title": "完成TODO应用API文档",
"description": "编写详细的API文档,包含每个功能的请求和响应示例。",
"dueDate": "2024-12-10T12:00:00Z",
"priority": "high"
}
  • 响应:

    • 成功响应

      • 状态码:201 Created
      • 响应体:
      {
      "id": 1,
      "title": "完成TODO应用API文档",
      "description": "编写详细的API文档,包含每个功能的请求和响应示例。",
      "dueDate": "2024-12-10T12:00:00Z",
      "status": "pending",
      "priority": "high",
      "createdAt": "2024-11-30T10:00:00Z",
      "updatedAt": "2024-11-30T10:00:00Z"
      }
    • 失败响应

      • 状态码:400 Bad Request
      • 响应体:
      {
      "error": "Title is required"
      }

2. 查看任务

  • 请求类型GET
  • 请求路径/api/tasks
  • 请求参数
    • status(可选):任务状态过滤选项,值为 all(所有任务),pending(未完成任务),completed(已完成任务)。默认值为 all
    • priority(可选):任务优先级过滤选项,值为 lowmediumhigh,支持多选。
  • 请求示例
GET /api/tasks?status=all&priority=high
  • 响应:

    • 成功响应

      • 状态码:200 OK
      • 响应体:
      [
      {
      "id": 1,
      "title": "完成TODO应用API文档",
      "description": "编写详细的API文档,包含每个功能的请求和响应示例。",
      "dueDate": "2024-12-10T12:00:00Z",
      "status": "pending",
      "priority": "high",
      "createdAt": "2024-11-30T10:00:00Z",
      "updatedAt": "2024-11-30T10:00:00Z"
      }
      ]
    • 失败响应

      • 状态码:400 Bad Request
      • 响应体:
      {
      "error": "Invalid filter options"
      }

3. 编辑任务

  • 请求类型PUT
  • 请求路径/api/tasks/{id}
  • 请求参数
    • title(可选):任务标题
    • description(可选):任务描述
    • dueDate(可选):任务截止日期
    • status(可选):任务状态(pendingcompleted
    • priority(可选):任务优先级(lowmediumhigh
  • 请求示例
{
"title": "更新TODO应用API文档",
"description": "更新API文档,包含最新的功能描述。",
"dueDate": "2024-12-12T12:00:00Z",
"priority": "medium"
}
  • 响应:

    • 成功响应

      • 状态码:200 OK
      • 响应体:
      {
      "id": 1,
      "title": "更新TODO应用API文档",
      "description": "更新API文档,包含最新的功能描述。",
      "dueDate": "2024-12-12T12:00:00Z",
      "status": "pending",
      "priority": "medium",
      "createdAt": "2024-11-30T10:00:00Z",
      "updatedAt": "2024-12-01T10:00:00Z"
      }
    • 失败响应

      • 状态码:400 Bad Request
      • 响应体:
      {
      "error": "Invalid task ID"
      }

4. 删除任务

  • 请求类型DELETE
  • 请求路径/api/tasks/{id}
  • 请求参数:无(通过 URL 提供任务的 id
  • 请求示例
DELETE /api/tasks/1
  • 响应:

    • 成功响应

      • 状态码:204 No Content
      • 响应体:无
    • 失败响应

      • 状态码:404 Not Found
      • 响应体:
      {
      "error": "Task not found"
      }

5. 标记任务完成/未完成

  • 请求类型PATCH
  • 请求路径/api/tasks/{id}/status
  • 请求参数
    • status(必填):任务的新状态,值为 pendingcompleted
  • 请求示例
{
"status": "completed"
}
  • 响应:

    • 成功响应

      • 状态码:200 OK
      • 响应体:
      {
      "id": 1,
      "title": "完成TODO应用API文档",
      "description": "编写详细的API文档,包含每个功能的请求和响应示例。",
      "dueDate": "2024-12-10T12:00:00Z",
      "status": "completed",
      "priority": "high",
      "createdAt": "2024-11-30T10:00:00Z",
      "updatedAt": "2024-11-30T10:00:00Z"
      }
    • 失败响应

      • 状态码:400 Bad Request
      • 响应体:
      {
      "error": "Invalid status value"
      }