字段is_subscription_available的拓展调整文档.md 2.5 KB

字段 is_subscription_available 的现状与新增值类型对应项目调整规划

概述

本文为对 t_patient_reminder.is_subscription_available 字段的现状梳理与将其从二值(0/1)扩展到三值(0/1/2)时的项目调整规划文档(数据库保持 TINYINT,Java 层使用枚举映射)。


一、现状快速梳理

  • 数据库字段:t_patient_reminder.is_subscription_available,当前定义为 TINYINT(1) DEFAULT '0',注释:'一次性订阅开关 (0-需要重新授权, 1-已授权可发送一次)'。
  • 当前代码中主要使用点:
    • api-springboot/src/main/java/work/baiyun/chronicdiseaseapp/service/impl/PatientReminderServiceImpl.java(保存时从请求将 Boolean->Byte,读取时 Byte->Boolean 给 VO)。
    • api-springboot/src/main/java/work/baiyun/chronicdiseaseapp/service/impl/MessageServiceImpl.java(发送订阅推送前检查 pr.getNotificationEnabled()==1 && pr.getSubscriptionAvailable()==1,当前并未在发送后消费/置 0)。
    • 文档:已有使用说明与设计文档位于 api-springboot/docs(见处理目录下的汇总与变更计划文档)。

二、变更目标

is_subscription_available 扩展为三值语义:

  • 0:需要重新授权(禁止发送订阅消息)
  • 1:已授权,可发送一次(发送成功后需置为 0)
  • 2:已授权,可发送无限次(不改变值)

要求:数据库字段保持 TINYINT,在 Java 层新增枚举以表达三状态;最小化对现有前端/后端的破坏,优先保证线上行为可控。


三、迁移进度

  • 2025-12-22:已完成数据库字段注释的改动,相关说明已同步到 docs/DB/t_patient_reminder.txt
    • 2025-12-22:已在 Java 层新增 SubscriptionAvailability 枚举及 MyBatis SubscriptionAvailabilityTypeHandler,相关文件:src/main/java/work/baiyun/chronicdiseaseapp/enums/SubscriptionAvailability.javasrc/main/java/work/baiyun/chronicdiseaseapp/handler/SubscriptionAvailabilityTypeHandler.java
    • 2025-12-22:已将实体/VO/Request 的 subscriptionAvailable 切换为枚举类型:PatientReminder(PO)、PatientReminderRequestPatientReminderResponse 已改为使用 SubscriptionAvailability;相应的保存/读取逻辑已在 PatientReminderServiceImpl 中调整。
    • 2025-12-22:已在 MessageServiceImpl 中改用枚举语义判断订阅可用性,并在发送成功后对一次性授权(ONCE)进行消费(写回 NONE),以实现一次性订阅的语义。