Files
AI-Health/backend/src/Health.Infrastructure/Diets/EfDietRepository.cs
MingNian 4d213b5a44 feat: 后端架构重构 — Endpoint→Service→Repository分层 + AI确认机制 + 异步任务持久化
- 核心业务拆分为 Endpoint → Application Service → Repository 三层
- AI写入操作必须用户确认后才写库(确认卡片机制)
- 报告/饮食/用药分析改为持久化任务队列(原子领取/重试/重启恢复)
- 运动计划修复: 连续真实日期替代周模板
- 用药提醒去重 + 通知Outbox预留
- 认证收拢到AuthService, 管理员收拢到AdminService
- AI会话加用户归属校验防串号
- 提示词调整为患者视角
- 开发假数据已关闭
- 21/21测试通过, 0警告0错误
2026-06-20 20:41:42 +08:00

34 lines
1.2 KiB
C#

using Health.Application.Diets;
namespace Health.Infrastructure.Diets;
public sealed class EfDietRepository(AppDbContext db) : IDietRepository
{
private readonly AppDbContext _db = db;
public async Task<IReadOnlyList<DietRecord>> ListAsync(Guid userId, DateOnly? recordedAt, MealType? mealType, CancellationToken ct)
{
var query = _db.DietRecords.Include(d => d.FoodItems).Where(d => d.UserId == userId);
if (recordedAt.HasValue)
query = query.Where(r => r.RecordedAt == recordedAt.Value);
if (mealType.HasValue)
query = query.Where(r => r.MealType == mealType.Value);
return await query.OrderByDescending(r => r.RecordedAt).ToListAsync(ct);
}
public Task<DietRecord?> GetOwnedAsync(Guid userId, Guid recordId, CancellationToken ct) =>
_db.DietRecords.FirstOrDefaultAsync(r => r.Id == recordId && r.UserId == userId, ct);
public async Task AddAsync(DietRecord record, CancellationToken ct) =>
await _db.DietRecords.AddAsync(record, ct);
public void Delete(DietRecord record) =>
_db.DietRecords.Remove(record);
public Task SaveChangesAsync(CancellationToken ct) =>
_db.SaveChangesAsync(ct);
}