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();
}
}