feat: 后端架构重构 — Endpoint→Service→Repository分层 + AI确认机制 + 异步任务持久化
- 核心业务拆分为 Endpoint → Application Service → Repository 三层 - AI写入操作必须用户确认后才写库(确认卡片机制) - 报告/饮食/用药分析改为持久化任务队列(原子领取/重试/重启恢复) - 运动计划修复: 连续真实日期替代周模板 - 用药提醒去重 + 通知Outbox预留 - 认证收拢到AuthService, 管理员收拢到AdminService - AI会话加用户归属校验防串号 - 提示词调整为患者视角 - 开发假数据已关闭 - 21/21测试通过, 0警告0错误
This commit is contained in:
@@ -64,8 +64,9 @@ class _MedicationEditPageState extends ConsumerState<MedicationEditPage> {
|
||||
];
|
||||
_timesPerDay = tod.length;
|
||||
_times = tod;
|
||||
if (m['startDate'] != null)
|
||||
if (m['startDate'] != null) {
|
||||
_start = DateTime.tryParse(m['startDate'].toString()) ?? DateTime.now();
|
||||
}
|
||||
if (m['endDate'] != null) _end = DateTime.tryParse(m['endDate'].toString());
|
||||
setState(() {});
|
||||
}
|
||||
@@ -110,13 +111,14 @@ class _MedicationEditPageState extends ConsumerState<MedicationEditPage> {
|
||||
popRoute(ref);
|
||||
}
|
||||
} catch (_) {
|
||||
if (mounted)
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text('保存失败'),
|
||||
backgroundColor: AppTheme.error,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
if (mounted) setState(() => _loading = false);
|
||||
}
|
||||
@@ -124,9 +126,12 @@ class _MedicationEditPageState extends ConsumerState<MedicationEditPage> {
|
||||
void _updateTimes(int n) {
|
||||
setState(() {
|
||||
_timesPerDay = n;
|
||||
while (_times.length < n)
|
||||
while (_times.length < n) {
|
||||
_times.add(const TimeOfDay(hour: 12, minute: 0));
|
||||
while (_times.length > n) _times.removeLast();
|
||||
}
|
||||
while (_times.length > n) {
|
||||
_times.removeLast();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user