schema.md 16 KB

<<<<<<< HEAD

一、Schema范式设计

训练计划及任务执行模块

训练计划模块描述

根据用户所需要的健身目标,生成的整个训练计划,训练计划中包含了很多子任务。

任务执行模块描述

记录各类型子任务以及每项任务的执行情况

任务类型

  • 一次性任务
  • 周期性任务(每日、每周、每月)

任务状态

  • 一次性任务,可以在任务数据中直接标注完成
  • 周期性任务,虽然整体有完成状态,但是每次的执行都需要有单独的表来记录。

具体范式设计

1. 表设计

1.1 训练计划表 (TrainingPlan)

1.2 任务表 (Task)

字段 类型 说明
objectId String 唯一标识符
createdAt Date 创建时间
user Pointer 关联用户
goal String 健身目标
content String 训练计划详情
tasks Array> 关联的子任务

1.3 任务执行记录表 (TaskExecution)

字段 类型 说明
objectId String 唯一标识符
createdAt Date 创建时间
plan Pointer 关联训练计划
type String 任务类型(一次性任务/周期性任务)
name String 任务名称
status String 任务状态(未完成/已完成)
count Number 执行次数
duration Number 持续时间
frequency String 周期性任务的频率(每日/每周/每月,可选)

1.4 用户表 (User)

字段 类型 说明
objectId String 唯一标识符
createdAt Date 创建时间
task Pointer 关联任务
execDate Date 执行日期
status String 执行状态(完成/未完成)
字段 类型 说明
objectId String 唯一标识符
createdAt Date 创建时间
username String 用户名
email String 用户邮箱
password String 用户密码

2. PlantUML 类图表示

以下是使用PlantUML表示的类图:

@startuml
class User {
  +objectId: String
  +createdAt: Date
  +username: String
  +email: String
  +password: String
}

class TrainingPlan {
  +objectId: String
  +createdAt: Date
  +goal: String
  +content: String
}

class Task {
  +objectId: String
  +createdAt: Date
  +type: String
  +name: String
  +status: String
  +count: Number
  +duration: Number
  +frequency: String
}

class TaskExecution {
  +objectId: String
  +createdAt: Date
  +execDate: Date
  +status: String
}

User "1" -- "0..*" TrainingPlan : owns
TrainingPlan "1" -- "0..*" Task : contains
Task "1" -- "0..*" TaskExecution : executes
@enduml

##打卡签到模块 ###模块描述 用户表是_User表 用户每日登录后,可以打卡签到,记录用户的签到时间,和日期,且每日只能打卡签到一次。

1. 用户表 (_User)

表名:User

字段:

  • objectId:String (用户唯一标识)
  • username:String (用户名)
  • email:String (用户邮箱)
  • createdAt:Date (创建时间)
  • updatedAt:Date (更新时间)

2. 签到记录表 (SignInRecord)

表名:SignInRecord

字段:

  • objectId:String (签到记录唯一标识)
  • user:Pointer (用户,外键,关联到User表)
  • signInDate:Date (签到日期)
  • createdAt:Date (创建时间)

3. 设计注意事项

  • SignInRecord 表中,user 字段使用 Pointer<User> 来表示与用户表的关联。
  • 每个用户每天只能有一条签到记录,因此在 SignInRecord 表中,usersignInDate 的组合应当是唯一的。
  • createdAt 字段用于记录每条记录的创建时间,以便于后续的数据追踪。

PlantUML 类图表示

@startuml
class User {
  +objectId: String
  +username: String
  +email: String
  +createdAt: Date
  +updatedAt: Date
}

class SignInRecord {
  +objectId: String
  +user: Pointer
  +signInDate: Date
  +createdAt: Date
}

User "1" -- "0..*" SignInRecord : has
@enduml

二、业务逻辑描述

训练计划的完整逻辑

计划生成逻辑

用户在APP内,通过文本生成整个训练计划。

数据来源

  • 用户输入:用户的健身需求等。
  • 用户体征:性别、年龄、体重等。

结果存储

  • TrainingPlan
    • 计划目标 goal:计划需求标题。
    • 计划详情 content:完整计划内容。

根据训练计划结果,排期生成任务

数据来源

  • 计划详情 content

文本生成

=======

一、训练计划及任务执行模块

  • 训练计划模块描述
    • 根据用户所需要的健身目标,生成的整个训练计划,训练计划中包含了很多子任务。
  • 任务执行模块描述

    • 记录各类型子任务以及每项任务的执行情况
    • 任务类型
    • 一次性任务
    • 周期性任务(每日、每周、每月)
    • 任务状态
    • 一次性任务,可以再任务数据中直接标注完成
    • 周期性任务,虽然整体有完成状态,但是每次的执行都需要有单独的表来记录。

表设计

训练计划表 (TrainingPlan)

  • objectId: 唯一标识符
  • createdAt: 创建时间
  • user: Pointer (关联用户)
  • goal: String (健身目标)
  • content: String (训练计划详情)
  • tasks: Array (关联的子任务)
  • 任务表 (Task)

    • objectId: 唯一标识符
    • createdAt: 创建时间
    • plan: Pointer (关联训练计划)
    • type: String (任务类型,如“一次性任务”或“周期性任务”)
    • name: String (任务名称)
    • status: String (任务状态,如“未完成”、“已完成”)
    • count: Number 执行次数
    • duration: Number 持续时间
    • frequency: String (周期性任务的频率,如“每日”、“每周”、“每月”,可选)
      • daily
      • weekly
      • monthly
      • yearly

    任务执行记录表 (TaskExecution)

    • objectId: 唯一标识符
    • createdAt: 创建时间
    • task: Pointer (关联任务)
    • execDate: Date (执行日期)
    • status: String (执行状态,如“完成”、“未完成”)

    用户表 (User)

    • objectId: 唯一标识符
    • createdAt: 创建时间
    • username: String (用户名)
    • email: String (用户邮箱)
    • password: String (用户密码)
    • phoneNumber: String (用户电话)
    • sex: String (用户性别)
    • age: Number (用户年龄)

    PlantUML 类图表示

    以下是使用 PlantUML 表示的类图:

    @startuml
    
    class TrainingPlan {
        +objectId: String
        +createdAt: Date
        +user: Pointer
        +goal: String
        +content: String
        +tasks: Array
    }
    
    class Task {
        +objectId: String
        +createdAt: Date
        +plan: Pointer
        +type: String
        +name: String
        +status: String
        +count: Number
        +duration: Number
        +frequency: String
    }
    
    class TaskExecution {
        +objectId: String
        +createdAt: Date
        +task: Pointer
        +execDate: Date
        +status: String
    }
    
    class User {
        +objectId: String
        +createdAt: Date
        +username: String
        +email: String
        +password: String
        +phoneNumber: String
        +sex: String
        +age: Number
    }
    
    TrainingPlan "1" -- "1..*" Task : contains
    Task "1" -- "0..*" TaskExecution : executes
    User "1" -- "0..*" TrainingPlan : creates
    
    @enduml
    

    设计说明

    • 用户表 (User): 存储用户的基本信息。
    • 训练计划表 (TrainingPlan): 每个用户可以有多个训练计划,每个计划可以包含多个子任务。
    • 任务表 (Task): 定义了训练计划中的子任务,支持一次性和周期性任务。
    • 任务执行记录表 (TaskExecution): 记录每个任务的执行情况,便于追踪任务的完成状态。

    打卡签到模块

    • 模块描述 用户表是_User 表 用户每日登录后,可以打卡签到,记录用户的签到时间,和日期,且每日只能打卡签到一次。

    用户表 (_User)

    • 表名:User
    • 字段
      • objectId: String (用户唯一标识)
      • username: String (用户名)
      • email: String (用户邮箱)
      • createdAt: Date (创建时间)
      • updatedAt: Date (更新时间)

    签到记录表 (SignInRecord)

    • 表名:SignInRecord
    • 字段
      • bjectId: String (签到记录唯一标识)
      • ser: Pointer (用户,外键,关联到 User 表)
      • ignInDate: Date (签到日期)
      • reatedAt: Date (创建时间)

    设计注意事项

    • SignInRecord 表中,user 字段使用 Pointer<User> 来表示与用户表的关联。
    • 每个用户每天只能有一条签到记录,因此在 SignInRecord 表中,usersignInDate 的组合应当是唯一的。
    • createdAt 字段用于记录每条记录的创建时间,以便于后续的数据追踪。

    PlantUML 类图表示

    @startuml
    
    class User {
        +objectId: String
        +username: String
        +email: String
        +createdAt: Date
        +updatedAt: Date
    }
    
    class SignInRecord {
        +objectId: String
        +user: Pointer
        +signInDate: Date
        +createdAt: Date
    }
    
    User "1" -- "0..*" SignInRecord : has
    
    @enduml
    

    说明

    • User 类表示用户表,包含用户的基本信息。
    • SignInRecord 类表示签到记录表,记录用户的签到情况。
    • 外键 user 使用 Pointer<User> 表示与用户表的关联。
    • 关系表示为“一个用户可以有零到多个签到记录”,符合设计范式。

    这种设计确保了数据的完整性和一致性,同时能够满足用户每日只能打卡一次的需求。

    二、业务逻辑描述

    训练计划的完整逻辑

    计划生成逻辑

    • 用户在 APP 内,通过文本生成整个训练计划
      • 数据来源
      • 用户输入:用户的健身需求等
      • 用户体征:性别、年龄、体重等
      • 文本生成
      • 提示词:训练计划生成提示词
      • 结果存储
      • TrainingPlan
        • 计划目标 goal 计划需求标题
        • 计划详情 content 完整计划内容
    • 根据训练计划结果,排期生成任务

      • 数据来源
      • 计划详情 content
      • 文本生成
      • 提示词:严格限制 json 格式,输出任务列表(附带当前时- 间,用于时间的生成)
      • 生成结果:taskList
      • 循环数组,向 Task 表逐个插入数据。

        538aa7279b

        [
        {
        "objectId": "task_001",
        "createdAt": "2024-12-01T10:00:00Z",
        "plan": "TrainingPlan_001",
        "type": "一次性任务",
        "name": "30分钟有氧运动",
        "status": "未完成",
        "count": 1,
        "duration": 30,
        "frequency": null
        },
        {
        "objectId": "task_002",
        "createdAt": "2024-12-01T10:00:00Z",
        "plan": "TrainingPlan_001",
        "type": "周期性任务",
        "name": "每周力量训练",
        "status": "已完成",
        "count": 4,
        "duration": 60,
        "frequency": "weekly"
        },
        {
        "objectId": "task_003",
        "createdAt": "2024-12-01T10:00:00Z",
        "plan": "TrainingPlan_001",
        "type": "周期性任务",
        "name": "每日步行1万步",
        "status": "未完成",
        "count": 8,
        "duration": 60,
        "frequency": "daily"
        },
        {
        "objectId": "task_004",
        "createdAt": "2024-12-01T10:00:00Z",
        "plan": "TrainingPlan_001",
        "type": "周期性任务",
        "name": "每月体重测量",
        "status": "已完成",
        "count": 1,
        "duration": 10,
        "frequency": "monthly"
        },
        {
        "objectId": "task_005",
        "createdAt": "2024-12-01T10:00:00Z",
        "plan": "TrainingPlan_001",
        "type": "一次性任务",
        "name": "参加健身课程",
        "status": "未完成",
        "count": 1,
        "duration": 45,
        "frequency": null
        }
        ]
        

    <<<<<<< HEAD

    计划执行的逻辑

    用户在 TodoList 页面,加载所有计划和子任务。

    • 用户主动填写执行情况并提交。

    数据存储

    • TaskExecution:记录每次用户执行情况提交的数据,并在提交后,根据 Task 中持续时间和次数条件,来判断 Task 本身是否标记完成。

    计划的完成和统计分析

    • 连表查询,分析用户计划完成的总体情况和进度。

    训练计划业务逻辑图例

    提示词:{业务逻辑},您是一名专业的产品经理,请您将上述逻辑的每个过程,用 PlantUML 的时序图表示出来。

    业务逻辑图例

    下面是根据您提供的业务逻辑描述所生成的 PlantUML 时序图。这个时序图展示了训练计划的生成、执行和完成统计分析的各个过程:

    @startuml
    actor User
    entity APP
    entity TrainingPlan
    entity Task
    entity TaskExecution
    
    User -> APP: 输入健身需求和体征信息
    APP -> TrainingPlan: 生成训练计划
    APP -> Task: 根据计划生成任务
    User -> APP: 查看任务和子任务
    User -> APP: 提交任务执行情况
    APP -> TaskExecution: 记录执行情况
    APP -> Task: 判断任务是否完成
    APP -> User: 展示任务完成情况
    @enduml
    

    解释

    1. 训练计划生成逻辑:通过用户输入的健身需求和体征信息,生成训练计划,并存储到 TrainingPlan 表中。
    2. 任务生成:根据训练计划的内容生成相关任务,每个任务存储到 Task 表中,并关联到相应的训练计划。
    3. 任务执行:用户在 TodoList 页面查看任务,并提交执行情况。每次执行情况记录在 TaskExecution 表中。
    4. 任务完成标记:通过任务的持续时间和次数条件,判断任务是否标记为完成。
    5. 计划统计分析:通过连表查询,分析用户任务完成的整体情况和进度。

    =======

    计划执行的逻辑

    • 用户在 TodoList 页面,加载所有计划和子任务
      • 用户主动填写执行情况并提交
      • 数据存储
        • TaskExecution 记录每次用户执行情况提交的数据,并在提交后,根据 Task 中持续时间和次数条件,来判断 Task 本身是否标记完成。

    计划的完成和统计分析

    • 连表查询,分析用户计划完成的总体情况和进度

    训练计划业务逻辑图例

    @startuml
    
    actor User
    participant "APP" as App
    participant "TrainingPlan" as TP
    participant "Task" as T
    participant "TaskExecution" as TE
    
    == 计划生成逻辑 ==
    User -> App : 输入健身需求
    App -> TP : 创建训练计划
    TP -> App : 返回训练计划ID
    
    == 计划执行逻辑 ==
    User -> App : 加载所有计划和子任务
    App -> T : 查询任务列表
    T -> App : 返回任务列表
    User -> App : 填写执行情况并提交
    App -> TE : 记录执行情况
    TE -> App : 返回执行记录ID
    App -> T : 检查任务完成状态
    T -> App : 更新任务状态
    
    == 计划完成和统计分析 ==
    App -> TP : 查询用户计划完成情况
    TP -> App : 返回完成情况和进度
    App -> User : 显示统计分析结果
    
    @enduml
    

    说明:

    • 用户(User)在 APP 中输入健身需求和体征信息,APP 生成训练计划并返回。
    • APP 根据训练计划生成任务列表并插入任务数据。
    • 用户在 TodoList 页面查看计划和子任务,并提交执行情况。
    • APP 记录执行情况,并判断任务是否完成。
    • 最后,APP 进行统计分析并将结果展示给用户。 >>>>>>> 538aa7279b