using Microsoft.AspNetCore.Mvc;
using TodoList.Api.Models;
using TodoTask = TodoList.Core.Entities.Task;
using TodoList.Core.Entities;
using TodoList.Core.Interfaces;
namespace TodoList.Api.Controllers;
///
/// 任务控制器,提供任务的 RESTful API 接口
///
[ApiController]
[Route("api/[controller]")]
public class TasksController : ControllerBase
{
private readonly ITaskService _taskService;
///
/// 构造函数,注入任务服务
///
/// 任务服务接口
public TasksController(ITaskService taskService)
{
_taskService = taskService;
}
///
/// 获取任务列表
///
/// 可选参数,true 获取已完成任务,false 获取未完成任务,不传则获取所有任务
/// 任务列表响应
[HttpGet]
public async Task>>> GetTasks([FromQuery] bool? completed = null)
{
try
{
List tasks;
if (completed.HasValue)
{
tasks = completed.Value
? await _taskService.GetCompletedTasksAsync()
: await _taskService.GetActiveTasksAsync();
}
else
{
tasks = await _taskService.GetAllTasksAsync();
}
var taskDtos = tasks.Select(MapToDto).ToList();
return Ok(new ApiResponse>
{
Success = true,
Data = taskDtos,
Message = "获取任务列表成功"
});
}
catch (Exception ex)
{
return StatusCode(500, new ApiResponse>
{
Success = false,
Message = "获取任务列表失败",
Errors = new List { ex.Message }
});
}
}
///
/// 根据ID获取指定任务
///
/// 任务ID
/// 任务详情响应
[HttpGet("{id}")]
public async Task>> GetTask(int id)
{
try
{
var task = await _taskService.GetTaskByIdAsync(id);
if (task == null)
{
return NotFound(new ApiResponse
{
Success = false,
Message = $"未找到ID为 {id} 的任务"
});
}
return Ok(new ApiResponse
{
Success = true,
Data = MapToDto(task),
Message = "获取任务成功"
});
}
catch (Exception ex)
{
return StatusCode(500, new ApiResponse
{
Success = false,
Message = "获取任务失败",
Errors = new List { ex.Message }
});
}
}
///
/// 创建新任务
///
/// 创建任务的数据传输对象
/// 创建的任务响应
[HttpPost]
public async Task>> CreateTask([FromBody] CreateTaskDto dto)
{
try
{
if (string.IsNullOrWhiteSpace(dto.Title))
{
return BadRequest(new ApiResponse
{
Success = false,
Message = "任务标题不能为空",
Errors = new List { "Title is required" }
});
}
var task = await _taskService.CreateTaskAsync(dto.Title, dto.Priority, dto.ParentTaskId);
return CreatedAtAction(nameof(GetTask), new { id = task.Id }, new ApiResponse
{
Success = true,
Data = MapToDto(task),
Message = "创建任务成功"
});
}
catch (Exception ex)
{
return StatusCode(500, new ApiResponse
{
Success = false,
Message = "创建任务失败",
Errors = new List { ex.Message }
});
}
}
///
/// 更新任务
///
/// 任务ID
/// 更新任务的数据传输对象
/// 更新后的任务响应
[HttpPut("{id}")]
public async Task>> UpdateTask(int id, [FromBody] UpdateTaskDto dto)
{
try
{
var task = await _taskService.UpdateTaskAsync(id, dto.Title, dto.Priority);
return Ok(new ApiResponse
{
Success = true,
Data = MapToDto(task),
Message = "更新任务成功"
});
}
catch (KeyNotFoundException)
{
return NotFound(new ApiResponse
{
Success = false,
Message = $"未找到ID为 {id} 的任务"
});
}
catch (Exception ex)
{
return StatusCode(500, new ApiResponse
{
Success = false,
Message = "更新任务失败",
Errors = new List { ex.Message }
});
}
}
///
/// 切换任务的完成状态
///
/// 任务ID
/// 更新后的任务响应
[HttpPatch("{id}/complete")]
public async Task>> ToggleComplete(int id)
{
try
{
var task = await _taskService.ToggleCompleteAsync(id);
return Ok(new ApiResponse
{
Success = true,
Data = MapToDto(task),
Message = task.IsCompleted ? "任务已完成" : "任务已取消完成"
});
}
catch (KeyNotFoundException)
{
return NotFound(new ApiResponse
{
Success = false,
Message = $"未找到ID为 {id} 的任务"
});
}
catch (Exception ex)
{
return StatusCode(500, new ApiResponse
{
Success = false,
Message = "更新任务状态失败",
Errors = new List { ex.Message }
});
}
}
///
/// 删除任务
///
/// 任务ID
/// 删除结果响应
[HttpDelete("{id}")]
public async Task>> DeleteTask(int id)
{
try
{
await _taskService.DeleteTaskAsync(id);
return Ok(new ApiResponse