小煎蛋 通知系统服务端
初始的目标是替代小方糖
里程碑
[ ] Dockerfile & Gitea Action
[ ] webhook消息通知
[ ] 通过GPT接口判断用户意图创建提醒
[ ] 日常提醒 & 重复提醒
[ ] 提醒记录
[ ] 提醒统计
零碎TODO
[ ] 用药提醒的卡片模板,确认、取消、延迟
[ ] 看看提醒统计的卡片需要什么数据,应该是需要单建统计数据表,看看能不能融合进Remind表,加个needRepeat字段
项目框架 Fastify
Fastify 是一个高效、低开销、功能丰富的 Web 框架,专为提高开发人员的生产力和性能而设计。
CLI工具 Fastify-CLI
Docs Fastify documentation.
项目备忘
运行端口: 3000
JSON结构设计
提醒主体信息
不论是用药提醒,还是什么提醒,本质上是一个可重复提醒的闹钟,单独建一个表存
每次提醒之后计算下次提醒时间,每次遍历列表确定是否需要提醒
interface Remind {
/**
* id
*/
id: string;
/**
* 卡片信息,用于绘制初始卡片、确认卡片、取消卡片、延迟卡片
*/
cardInfo: {
/**
* 提醒标题
*/
title: string;
/**
* 提醒内容
*/
content: string;
/**
* 确认文本
*/
confirmText: string;
/**
* 取消文本
*/
cancelText: string;
/**
* 延迟文本
*/
delayText: string;
} | null;
/**
* 卡片模板ID
*/
templateId: string;
/**
* 确认之后的卡片模板ID
*/
confirmTemplateId: string;
/**
* 取消之后的卡片模板ID
*/
cancelTemplateId: string;
/**
* 延迟之后的卡片模板ID
*/
delayTemplateId: string;
/**
* 重复类型
* single: 一次性
* daily: 每天
* weekly: 每周
* monthly: 每月
* yearly: 每年
* workday: 工作日
* holiday: 节假日
*/
frequency:
| "single"
| "daily"
| "weekly"
| "monthly"
| "yearly"
| "workday"
| "holiday";
/**
* 提醒时间,格式为HH:mm
*/
time: string;
/**
* 星期几,当frequency为weekly时有效
*/
dayOfWeek: number;
/**
* 每月的几号,当frequency为monthly时有效
*/
dayOfMonth: number;
/**
* 今年的哪天提醒,当frequency为single时有效,格式为MM-dd
*/
day: string;
/**
* 每年的哪天提醒,当frequency为yearly时有效,格式为MM-dd
*/
dayOfYear: string;
/**
* 是否启用
*/
enabled: boolean;
/**
* 下次提醒的时间,格式为yyyy-MM-dd HH:mm
*/
nextRemindTime: string;
}
提醒记录
每次提醒之后记录下messageId,用于确认、取消、延迟
将用户的反馈结果融合进提醒状态里,用于统计
多余的数据如选择的结果则存储进result,没有留空
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;
}
Description
Languages
TypeScript
99.1%
JavaScript
0.8%
Dockerfile
0.1%