feat: 优化提醒主体 & 提醒记录的表设计
This commit is contained in:
parent
3f9dbc7663
commit
650b6a416b
126
README.md
126
README.md
@ -1,17 +1,25 @@
|
||||
# 小煎蛋 通知系统服务端
|
||||
初始的目标是替代小方糖
|
||||
|
||||
## 里程碑
|
||||
|
||||
[ ] Dockerfile & Gitea Action
|
||||
|
||||
[ ] webhook消息通知
|
||||
|
||||
[ ] 通过卡片操作药品提醒
|
||||
[ ] 通过GPT接口判断用户意图创建提醒
|
||||
|
||||
[ ] 用药提醒 & 重复提醒
|
||||
[ ] 日常提醒 & 重复提醒
|
||||
|
||||
[ ] 用药记录
|
||||
[ ] 提醒记录
|
||||
|
||||
[ ] 用药统计
|
||||
[ ] 提醒统计
|
||||
|
||||
## 零碎TODO
|
||||
|
||||
[ ] 用药提醒的卡片模板,确认、取消、延迟
|
||||
|
||||
[ ] 看看提醒统计的卡片需要什么数据,应该是需要单建统计数据表,看看能不能融合进Remind表,加个needRepeat字段
|
||||
|
||||
## 项目框架 [Fastify](https://fastify.dev/)
|
||||
Fastify 是一个高效、低开销、功能丰富的 Web 框架,专为提高开发人员的生产力和性能而设计。
|
||||
@ -24,33 +32,58 @@ Docs [Fastify documentation](https://www.fastify.io/docs/latest/).
|
||||
运行端口: 3000
|
||||
|
||||
## JSON结构设计
|
||||
用药提醒,本质上是一个可重复提醒的闹钟,单独建一个表存
|
||||
### 提醒主体信息
|
||||
不论是用药提醒,还是什么提醒,本质上是一个可重复提醒的闹钟,单独建一个表存
|
||||
|
||||
每次提醒之后计算下次提醒时间,每次遍历列表确定是否需要提醒
|
||||
|
||||
```typescript
|
||||
interface Remind {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
id: number;
|
||||
id: string;
|
||||
/**
|
||||
* 提醒标题
|
||||
* 卡片信息,用于绘制初始卡片、确认卡片、取消卡片、延迟卡片
|
||||
*/
|
||||
title: string;
|
||||
cardInfo: {
|
||||
/**
|
||||
* 提醒标题
|
||||
*/
|
||||
title: string;
|
||||
/**
|
||||
* 提醒内容
|
||||
*/
|
||||
content: string;
|
||||
/**
|
||||
* 确认文本
|
||||
*/
|
||||
confirmText: string;
|
||||
/**
|
||||
* 取消文本
|
||||
*/
|
||||
cancelText: string;
|
||||
/**
|
||||
* 延迟文本
|
||||
*/
|
||||
delayText: string;
|
||||
} | null;
|
||||
/**
|
||||
* 提醒内容
|
||||
* 卡片模板ID
|
||||
*/
|
||||
content: string;
|
||||
templateId: string;
|
||||
/**
|
||||
* 确认文本
|
||||
* 确认之后的卡片模板ID
|
||||
*/
|
||||
confirmText: string;
|
||||
confirmTemplateId: string;
|
||||
/**
|
||||
* 取消文本
|
||||
* 取消之后的卡片模板ID
|
||||
*/
|
||||
cancelText: string;
|
||||
cancelTemplateId: string;
|
||||
/**
|
||||
* 延迟文本
|
||||
* 延迟之后的卡片模板ID
|
||||
*/
|
||||
delayText: string;
|
||||
delayTemplateId: string;
|
||||
/**
|
||||
* 重复类型
|
||||
* single: 一次性
|
||||
@ -61,7 +94,14 @@ interface Remind {
|
||||
* workday: 工作日
|
||||
* holiday: 节假日
|
||||
*/
|
||||
frequency: 'single' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'workday' | 'holiday';
|
||||
frequency:
|
||||
| "single"
|
||||
| "daily"
|
||||
| "weekly"
|
||||
| "monthly"
|
||||
| "yearly"
|
||||
| "workday"
|
||||
| "holiday";
|
||||
/**
|
||||
* 提醒时间,格式为HH:mm
|
||||
*/
|
||||
@ -69,22 +109,66 @@ interface Remind {
|
||||
/**
|
||||
* 星期几,当frequency为weekly时有效
|
||||
*/
|
||||
dayOfWeek?: number;
|
||||
dayOfWeek: number;
|
||||
/**
|
||||
* 每月的几号,当frequency为monthly时有效
|
||||
*/
|
||||
dayOfMonth?: number;
|
||||
dayOfMonth: number;
|
||||
/**
|
||||
* 今年的哪天提醒,当frequency为single时有效,格式为MM-dd
|
||||
*/
|
||||
day?: string;
|
||||
day: string;
|
||||
/**
|
||||
* 每年的哪天提醒,当frequency为yearly时有效,格式为MM-dd
|
||||
*/
|
||||
dayOfYear?: string;
|
||||
dayOfYear: string;
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
enabled: boolean;
|
||||
/**
|
||||
* 下次提醒的时间,格式为yyyy-MM-dd HH:mm
|
||||
*/
|
||||
nextRemindTime: string;
|
||||
}
|
||||
```
|
||||
|
||||
### 提醒记录
|
||||
每次提醒之后记录下messageId,用于确认、取消、延迟
|
||||
|
||||
将用户的反馈结果融合进提醒状态里,用于统计
|
||||
|
||||
多余的数据如选择的结果则存储进result,没有留空
|
||||
|
||||
```typescript
|
||||
interface RemindRecord {
|
||||
/**
|
||||
* 记录Id
|
||||
*/
|
||||
id: string;
|
||||
/**
|
||||
* 关联的提醒Id
|
||||
*/
|
||||
remindId: string;
|
||||
/**
|
||||
* 发送的卡片Id
|
||||
*/
|
||||
messageId: string;
|
||||
/**
|
||||
* 提醒状态
|
||||
* pending: 待确认
|
||||
* delay: 已延迟
|
||||
* confirmed: 已确认
|
||||
* canceled: 已取消
|
||||
*/
|
||||
status: "pending" | "delay" | "confirmed" | "canceled";
|
||||
/**
|
||||
* 本次提醒时间,格式为yyyy-MM-dd HH:mm
|
||||
*/
|
||||
remindTime: string;
|
||||
/**
|
||||
* 用户回答的结果
|
||||
*/
|
||||
result: string;
|
||||
}
|
||||
```
|
103
dataDeclare.ts
103
dataDeclare.ts
@ -1,28 +1,52 @@
|
||||
/**
|
||||
* 提醒列表
|
||||
*/
|
||||
interface Remind {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
id: number;
|
||||
id: string;
|
||||
/**
|
||||
* 提醒标题
|
||||
* 卡片信息,用于绘制初始卡片、确认卡片、取消卡片、延迟卡片
|
||||
*/
|
||||
title: string;
|
||||
cardInfo: {
|
||||
/**
|
||||
* 提醒标题
|
||||
*/
|
||||
title: string;
|
||||
/**
|
||||
* 提醒内容
|
||||
*/
|
||||
content: string;
|
||||
/**
|
||||
* 确认文本
|
||||
*/
|
||||
confirmText: string;
|
||||
/**
|
||||
* 取消文本
|
||||
*/
|
||||
cancelText: string;
|
||||
/**
|
||||
* 延迟文本
|
||||
*/
|
||||
delayText: string;
|
||||
} | null;
|
||||
/**
|
||||
* 提醒内容
|
||||
* 卡片模板ID
|
||||
*/
|
||||
content: string;
|
||||
templateId: string;
|
||||
/**
|
||||
* 确认文本
|
||||
* 确认之后的卡片模板ID
|
||||
*/
|
||||
confirmText: string;
|
||||
confirmTemplateId: string;
|
||||
/**
|
||||
* 取消文本
|
||||
* 取消之后的卡片模板ID
|
||||
*/
|
||||
cancelText: string;
|
||||
cancelTemplateId: string;
|
||||
/**
|
||||
* 延迟文本
|
||||
* 延迟之后的卡片模板ID
|
||||
*/
|
||||
delayText: string;
|
||||
delayTemplateId: string;
|
||||
/**
|
||||
* 重复类型
|
||||
* single: 一次性
|
||||
@ -33,7 +57,14 @@ interface Remind {
|
||||
* workday: 工作日
|
||||
* holiday: 节假日
|
||||
*/
|
||||
frequency: 'single' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'workday' | 'holiday';
|
||||
frequency:
|
||||
| "single"
|
||||
| "daily"
|
||||
| "weekly"
|
||||
| "monthly"
|
||||
| "yearly"
|
||||
| "workday"
|
||||
| "holiday";
|
||||
/**
|
||||
* 提醒时间,格式为HH:mm
|
||||
*/
|
||||
@ -41,21 +72,59 @@ interface Remind {
|
||||
/**
|
||||
* 星期几,当frequency为weekly时有效
|
||||
*/
|
||||
dayOfWeek?: number;
|
||||
dayOfWeek: number;
|
||||
/**
|
||||
* 每月的几号,当frequency为monthly时有效
|
||||
*/
|
||||
dayOfMonth?: number;
|
||||
dayOfMonth: number;
|
||||
/**
|
||||
* 今年的哪天提醒,当frequency为single时有效,格式为MM-dd
|
||||
*/
|
||||
day?: string;
|
||||
day: string;
|
||||
/**
|
||||
* 每年的哪天提醒,当frequency为yearly时有效,格式为MM-dd
|
||||
*/
|
||||
dayOfYear?: string;
|
||||
dayOfYear: string;
|
||||
/**
|
||||
* 是否启用
|
||||
*/
|
||||
enabled: boolean;
|
||||
}
|
||||
/**
|
||||
* 下次提醒的时间,格式为yyyy-MM-dd HH:mm
|
||||
*/
|
||||
nextRemindTime: string;
|
||||
}
|
||||
/**
|
||||
* 提醒记录
|
||||
* 记录提醒时间,回答结果等
|
||||
*/
|
||||
interface RemindRecord {
|
||||
/**
|
||||
* 记录Id
|
||||
*/
|
||||
id: string;
|
||||
/**
|
||||
* 关联的提醒Id
|
||||
*/
|
||||
remindId: string;
|
||||
/**
|
||||
* 发送的卡片Id
|
||||
*/
|
||||
messageId: string;
|
||||
/**
|
||||
* 提醒状态
|
||||
* pending: 待确认
|
||||
* delay: 已延迟
|
||||
* confirmed: 已确认
|
||||
* canceled: 已取消
|
||||
*/
|
||||
status: "pending" | "delay" | "confirmed" | "canceled";
|
||||
/**
|
||||
* 本次提醒时间,格式为yyyy-MM-dd HH:mm
|
||||
*/
|
||||
remindTime: string;
|
||||
/**
|
||||
* 用户回答的结果
|
||||
*/
|
||||
result: string;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user