feat: 应用内通知系统 + 结构化手术史/用药等相关改动

- 新增用户通知 outbox 流水线(EfUserNotificationPipeline)与后台投递 worker
- 通知中心页面及前端通知服务接入
- 健康指标异常、用药/运动提醒等事件统一产出站内通知
- 健康档案结构化手术史、用药提醒扫描、医生/用户端点等配套调整
- AppDbContext 注册通知相关实体
This commit is contained in:
MingNian
2026-06-21 21:06:29 +08:00
parent b57d0d16f4
commit 13714d9ed8
34 changed files with 1541 additions and 200 deletions

View File

@@ -36,6 +36,9 @@ public static class UserEndpoints
group.MapPut("/health-archive", async (UpdateArchiveRequest req, HttpContext http, IHealthArchiveService archives, CancellationToken ct) =>
{
var surgeryDate = DateOnly.TryParse(req.SurgeryDate, out var parsed) ? parsed : (DateOnly?)null;
var surgeries = req.Surgeries?.Select(s => new HealthArchiveSurgeryInput(
s.Type,
DateOnly.TryParse(s.Date, out var date) ? date : null)).ToList();
await archives.UpdateAsync(
GetUserId(http),
new HealthArchiveUpdateRequest(
@@ -45,7 +48,8 @@ public static class UserEndpoints
req.Allergies,
req.DietRestrictions,
req.ChronicDiseases,
req.FamilyHistory),
req.FamilyHistory,
surgeries),
ct);
return Results.Ok(new { code = 0, data = new { success = true }, message = (string?)null });
});
@@ -65,4 +69,7 @@ public sealed record UpdateProfileRequest(string? Name, string? Gender, string?
public sealed record UpdateArchiveRequest(
string? Diagnosis, string? SurgeryType, string? SurgeryDate,
List<string>? Allergies, List<string>? DietRestrictions,
List<string>? ChronicDiseases, string? FamilyHistory);
List<string>? ChronicDiseases, string? FamilyHistory,
List<UpdateArchiveSurgeryRequest>? Surgeries);
public sealed record UpdateArchiveSurgeryRequest(string Type, string? Date);