7a4c516a20
- 后端:新增 CloudSync 认证/权限/端点/服务与 DTO - 数据:新增用户/会话/安全策略实体与 EF Core migrations - 前端:新增云同步设置 UI、客户端与本地存储;Vite 支持 maui 构建输出到 wwwroot - 桌面端:新增 Avalonia 项目、内置 WebServer、托盘与 Windows 全局热键 - 发布/构建:新增 Windows/Linux 发布脚本与统一入口;调整 MAUI 资源与安装包配置 - 文档:同步更新 README/docs 与协作规则
126 lines
4.0 KiB
C#
126 lines
4.0 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Hua.Todo.Application.Data;
|
|
using Hua.Todo.Core.Entities;
|
|
using Hua.Todo.Core.Interfaces;
|
|
|
|
namespace Hua.Todo.Application.Repositories;
|
|
|
|
/// <summary>
|
|
/// 任务仓储实现(EF Core)。
|
|
/// </summary>
|
|
public class TaskRepository : ITaskRepository
|
|
{
|
|
private readonly TodoDbContext _context;
|
|
|
|
/// <summary>
|
|
/// 创建 <see cref="TaskRepository"/>。
|
|
/// </summary>
|
|
/// <param name="context">数据库上下文。</param>
|
|
public TaskRepository(TodoDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取所有任务。
|
|
/// </summary>
|
|
/// <returns>包含所有任务实体的列表。</returns>
|
|
public async Task<List<TaskEntity>> GetAllAsync()
|
|
{
|
|
return await _context.Tasks
|
|
.Where(t => t.UserId == TodoUserIds.LocalUserId)
|
|
.Include(t => t.SubTasks)
|
|
.ToListAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据 ID 获取任务。
|
|
/// </summary>
|
|
/// <param name="id">任务 ID。</param>
|
|
/// <returns>匹配的任务实体;如果不存在则返回 null。</returns>
|
|
public async Task<TaskEntity?> GetByIdAsync(int id)
|
|
{
|
|
return await _context.Tasks
|
|
.Include(t => t.SubTasks)
|
|
.FirstOrDefaultAsync(t => t.Id == id && t.UserId == TodoUserIds.LocalUserId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取未完成任务列表。
|
|
/// </summary>
|
|
/// <returns>未完成的任务实体列表。</returns>
|
|
public async Task<List<TaskEntity>> GetActiveTasksAsync()
|
|
{
|
|
return await _context.Tasks
|
|
.Where(t => t.UserId == TodoUserIds.LocalUserId && !t.IsCompleted)
|
|
.OrderByDescending(t => t.CreatedAt)
|
|
.ToListAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取已完成任务列表。
|
|
/// </summary>
|
|
/// <returns>已完成的任务实体列表。</returns>
|
|
public async Task<List<TaskEntity>> GetCompletedTasksAsync()
|
|
{
|
|
return await _context.Tasks
|
|
.Where(t => t.UserId == TodoUserIds.LocalUserId && t.IsCompleted)
|
|
.OrderByDescending(t => t.UpdatedAt)
|
|
.ToListAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新增一个任务。
|
|
/// </summary>
|
|
/// <param name="taskEntity">要添加的任务实体。</param>
|
|
/// <returns>已持久化的任务实体(包含生成的 ID)。</returns>
|
|
public async Task<TaskEntity> AddAsync(TaskEntity taskEntity)
|
|
{
|
|
taskEntity.UserId = TodoUserIds.LocalUserId;
|
|
_context.Tasks.Add(taskEntity);
|
|
await _context.SaveChangesAsync();
|
|
return taskEntity;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新现有任务信息。
|
|
/// </summary>
|
|
/// <param name="taskEntity">要更新的任务实体。</param>
|
|
/// <returns>更新后的任务实体。</returns>
|
|
public async Task<TaskEntity> UpdateAsync(TaskEntity taskEntity)
|
|
{
|
|
taskEntity.UpdatedAt = DateTime.UtcNow;
|
|
_context.Tasks.Update(taskEntity);
|
|
await _context.SaveChangesAsync();
|
|
return taskEntity;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据 ID 删除任务。
|
|
/// </summary>
|
|
/// <param name="id">要删除的任务 ID。</param>
|
|
/// <returns>表示删除操作的任务。</returns>
|
|
public async Task DeleteAsync(int id)
|
|
{
|
|
var task = await _context.Tasks.FirstOrDefaultAsync(t => t.Id == id && t.UserId == TodoUserIds.LocalUserId);
|
|
if (task != null)
|
|
{
|
|
_context.Tasks.Remove(task);
|
|
await _context.SaveChangesAsync();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取指定父任务的子任务列表。
|
|
/// </summary>
|
|
/// <param name="parentTaskId">父任务 ID。</param>
|
|
/// <returns>子任务实体的列表。</returns>
|
|
public async Task<List<TaskEntity>> GetSubTasksAsync(int parentTaskId)
|
|
{
|
|
return await _context.Tasks
|
|
.Where(t => t.UserId == TodoUserIds.LocalUserId && t.ParentTaskId == parentTaskId)
|
|
.OrderByDescending(t => t.CreatedAt)
|
|
.ToListAsync();
|
|
}
|
|
}
|