using Microsoft.EntityFrameworkCore; using Hua.Todo.Application.Data; using Hua.Todo.Core.Entities; using Hua.Todo.Core.Interfaces; namespace Hua.Todo.Application.Repositories; /// /// 任务仓储实现(EF Core)。 /// public class TaskRepository : ITaskRepository { private readonly TodoDbContext _context; /// /// 创建 。 /// /// 数据库上下文。 public TaskRepository(TodoDbContext context) { _context = context; } /// /// 获取所有任务。 /// /// 包含所有任务实体的列表。 public async Task> GetAllAsync() { return await _context.Tasks .Include(t => t.SubTasks) .ToListAsync(); } /// /// 根据 ID 获取任务。 /// /// 任务 ID。 /// 匹配的任务实体;如果不存在则返回 null。 public async Task GetByIdAsync(int id) { return await _context.Tasks .Include(t => t.SubTasks) .FirstOrDefaultAsync(t => t.Id == id); } /// /// 获取未完成任务列表。 /// /// 未完成的任务实体列表。 public async Task> GetActiveTasksAsync() { return await _context.Tasks .Where(t => !t.IsCompleted) .OrderByDescending(t => t.CreatedAt) .ToListAsync(); } /// /// 获取已完成任务列表。 /// /// 已完成的任务实体列表。 public async Task> GetCompletedTasksAsync() { return await _context.Tasks .Where(t => t.IsCompleted) .OrderByDescending(t => t.UpdatedAt) .ToListAsync(); } /// /// 新增一个任务。 /// /// 要添加的任务实体。 /// 已持久化的任务实体(包含生成的 ID)。 public async Task AddAsync(TaskEntity taskEntity) { _context.Tasks.Add(taskEntity); await _context.SaveChangesAsync(); return taskEntity; } /// /// 更新现有任务信息。 /// /// 要更新的任务实体。 /// 更新后的任务实体。 public async Task UpdateAsync(TaskEntity taskEntity) { taskEntity.UpdatedAt = DateTime.UtcNow; _context.Tasks.Update(taskEntity); await _context.SaveChangesAsync(); return taskEntity; } /// /// 根据 ID 删除任务。 /// /// 要删除的任务 ID。 /// 表示删除操作的任务。 public async Task DeleteAsync(int id) { var task = await _context.Tasks.FindAsync(id); if (task != null) { _context.Tasks.Remove(task); await _context.SaveChangesAsync(); } } /// /// 获取指定父任务的子任务列表。 /// /// 父任务 ID。 /// 子任务实体的列表。 public async Task> GetSubTasksAsync(int parentTaskId) { return await _context.Tasks .Where(t => t.ParentTaskId == parentTaskId) .OrderByDescending(t => t.CreatedAt) .ToListAsync(); } }