以下是完整的 PlantUML 类图,表示上述表结构:
@startuml
class _User {
+objectId: String
+createdAt: Date
+username: String
+email: String
+password: String
+profilePicture: String
}
class MealPlan {
+objectId: String
+createdAt: Date
+user: Pointer<_User>
+startDate: Date
+endDate: Date
+Plan: Array<DailyPlan>
+planDetails: String
}
class DailyPlan {
+date: Date
+meals: Array<Meal>
}
class Meal {
+mealTime: String
+foodItems: Array<FoodItem>
}
class FoodItem {
+foodType: String
+portion: String
}
class MealExecution {
+objectId: String
+createdAt: Date
+mealPlan: Pointer<MealPlan>
+executionDate: Date
+dailyIntake: Array<DailyIntake>
+executionStatus: String
+dailyFeedback: String
}
class DailyIntake {
+date: Date
+meals: Array<MealIntake>
}
class MealIntake {
+mealTime: String
+foodItems: Array<FoodItemIntake>
}
class FoodItemIntake {
+foodType: String
+portion: String
}
_User "1" -- "0..*" MealPlan : creates >
MealPlan "1" -- "0..*" MealExecution : linked to >
MealExecution "1" -- "0..*" DailyIntake : records >
DailyIntake "1" -- "0..*" MealIntake : includes >
@enduml
startDate
和 endDate
字段上可以添加索引,以便于查询特定时间段的饮食规划。executionDate
字段上可以添加索引,以便于查询特定日期的执行记录。在 _User 表的 username
和 email
字段上可以添加唯一性约束,以防止重复注册。
通过这样的设计,饮食规划模块能够有效地支持用户的饮食管理需求,同时确保数据结构的灵活性和可扩展性。
以下是使用PlantUML表示的类图:
@startuml
class _User {
+objectId: String
+createdAt: Date
+username: String
+email: String
+password: String
+profilePicture: String
}
class CheckIn {
+objectId: String
+createdAt: Date
+user: Pointer<_User>
+checkInDate: Date
}
_User "1" -- "0..*" CheckIn : has >
@enduml
user
字段与 _User
表建立外键关联。CheckIn
表的 checkInDate
字段上可以添加唯一性约束,以确保同一用户在同一天只能打卡一次。username
和 email
字段添加唯一性约束,以防止重复注册。这样设计的数据库结构可以有效支持用户的打卡功能及饮食感受的记录,同时遵循了数据库设计的基本范式。
根据饮食需求和目标,排期生成每日饮食规划
生成结果:mealList
遍历数组,向Meal表逐个插入数据。 以下是针对减肥目标的饮食计划的 JSON 格式的 Array 数组测试数据,包含多种食物以确保营养均衡。
[
{
"mealTime": "早餐",
"foodItems": [
{
"foodType": "燕麦粥",
"portion": "50克"
},
{
"foodType": "鸡蛋白",
"portion": "2个"
},
{
"foodType": "蓝莓",
"portion": "30克"
}
]
},
{
"mealTime": "午餐",
"foodItems": [
{
"foodType": "蒸鸡胸肉",
"portion": "150克"
},
{
"foodType": "西兰花",
"portion": "100克"
},
{
"foodType": "糙米饭",
"portion": "100克"
},
{
"foodType": "胡萝卜",
"portion": "50克"
}
]
},
{
"mealTime": "晚餐",
"foodItems": [
{
"foodType": "清蒸鱼",
"portion": "150克"
},
{
"foodType": "黄瓜沙拉",
"portion": "200克"
},
{
"foodType": "番茄",
"portion": "100克"
}
]
},
{
"mealTime": "加餐",
"foodItems": [
{
"foodType": "坚果",
"portion": "一小把"
},
{
"foodType": "低脂酸奶",
"portion": "150毫升"
},
{
"foodType": "苹果",
"portion": "1个"
}
]
}
]
Language:json
数据说明
早餐:包含燕麦粥、鸡蛋白和蓝莓,提供复合碳水化合物、蛋白质和抗氧化剂。
午餐:蒸鸡胸肉、西兰花、糙米饭和胡萝卜,提供高蛋白、纤维和维生素。
晚餐:清蒸鱼、黄瓜沙拉和番茄,低脂肪且富含维生素和水分。
加餐:坚果、低脂酸奶和苹果,提供健康脂肪、蛋白质和纤维。
用户在TodoList页面,加载所有计划和子任务
用户主动填写执行情况并提交
数据存储
MealExecution记录每次用户执行情况提交的数据。
连表查询,分析用户计划完成的总体情况和进度
@startuml
actor User
participant App
participant "MealPlan" as MealPlanDB
participant "DailyPlan" as DailyPlanDB
participant "Meal" as MealDB
User -> App : 输入饮食需求
User -> App : 输入个人体征(性别、年龄、体重、身高、饮食偏好等)
App -> App : 数据采集
App -> App : 生成饮食规划文本
App -> MealPlanDB : 存储饮食规划(planDetails)
App -> App : 生成每日饮食规划
App -> MealDB : 遍历数组,插入每个Meal
@enduml
@startuml
actor User
participant App
participant "MealExecution" as MealExecutionDB
participant "DailyIntake" as DailyIntakeDB
User -> App : 加载TodoList页面
App -> MealExecutionDB : 查询所有计划和子任务
App -> User : 显示计划和子任务
User -> App : 填写执行情况并提交
App -> MealExecutionDB : 存储执行情况
App -> DailyIntakeDB : 更新每日饮食情况
@enduml
@startuml
actor User
participant App
participant "MealExecution" as MealExecutionDB
participant "统计分析" as Analytics
User -> App : 请求计划完成情况
App -> MealExecutionDB : 连表查询用户计划完成情况
App -> Analytics : 统计分析用户进度
Analytics -> App : 返回统计结果
App -> User : 显示计划完成情况和进度
@enduml
将以上时序图组合在一起,可以形成完整的饮食规划业务逻辑图例。每个时序图展示了用户与应用程序之间的交互,以及后端数据库的操作。
这些时序图清晰地展示了用户在饮食规划生成、规划执行和计划完成统计分析过程中的交互逻辑。可以帮助团队更好地理解系统的工作流程,从而在开发和优化过程中提供指导。