/
Kovalenko
/
TODO
Обзор
Документация
Войти
/
Kovalenko
/
TODO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4
TaskApi/Controllers/V2/TasksController.cs
204 строки
7 KB
Kovalenko1
add indController
07 мар 2026, 11:30
07 мар 2026, 11:30
a82b55c
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaskApi.Dtos.V2; using TaskApi.Messages; using TaskApi.Services; namespace TaskApi.Controllers.V2; [ApiController] [Authorize] [ApiExplorerSettings(GroupName = "v2")] [Route("api/v2/tasks")] public class TasksController : ControllerBase { private readonly RabbitMqClientService _clientService; public TasksController(RabbitMqClientService clientService) { _clientService = clientService; } [HttpGet] [ProducesResponseType(typeof(IEnumerable<TaskResponseV2>), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<ActionResult<IEnumerable<TaskResponseV2>>> GetTasks( [FromQuery] string? status, [FromQuery] int? page, [FromQuery] int? pageSize, [FromQuery] string? include) { var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v2", action: "get_tasks", payload: new GetTasksData { Status = status, Page = page, PageSize = pageSize, Include = include }, auth: token); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } if (response.Data is null) { return Ok(Array.Empty<object>()); } return Ok(response.Data); } [HttpGet("{id:guid}")] [ProducesResponseType(typeof(TaskResponseV2), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<ActionResult<TaskResponseV2>> GetTask(Guid id) { var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v2", action: "get_task", payload: new GetTaskData { TaskId = id.ToString() }, auth: token); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } if (response.Data is null) { return NotFound(); } return Ok(response.Data); } [HttpPost] [ProducesResponseType(typeof(TaskResponseV2), StatusCodes.Status201Created)] [ProducesResponseType(typeof(TaskResponseV2), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status409Conflict)] public async Task<ActionResult<TaskResponseV2>> CreateTask([FromBody] TaskCreateRequestV2 request) { var title = ApiHelpers.NormalizeRequired(request.Title); if (title is null) { return BadRequest("Title is required."); } if (request.Priority is < 1 or > 5) { return BadRequest("Priority must be between 1 and 5."); } var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v2", action: "create_task", payload: new TaskData { Title = title, Description = request.Description, Status = request.Status.ToString(), DueDate = request.DueDate?.ToString("O"), Assignee = ApiHelpers.NormalizeOptional(request.Assignee), Priority = request.Priority }, auth: token); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } return StatusCode(StatusCodes.Status201Created, response.Data); } [HttpPut("{id:guid}")] [ProducesResponseType(typeof(TaskResponseV2), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<ActionResult<TaskResponseV2>> UpdateTask(Guid id, [FromBody] TaskUpdateRequestV2 request) { var title = ApiHelpers.NormalizeRequired(request.Title); if (title is null) { return BadRequest("Title is required."); } if (request.Priority is < 1 or > 5) { return BadRequest("Priority must be between 1 and 5."); } var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v2", action: "update_task", payload: new UpdateTaskData { TaskId = id.ToString(), Title = title, Description = request.Description, Status = request.Status.ToString(), DueDate = request.DueDate?.ToString("O"), Assignee = ApiHelpers.NormalizeOptional(request.Assignee), Priority = request.Priority }, auth: token); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } return Ok(response.Data); } [HttpDelete("{id:guid}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<IActionResult> DeleteTask(Guid id) { var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v2", action: "delete_task", payload: new DeleteTaskData { TaskId = id.ToString() }, auth: token); var response = await _clientService.SendRequestAsync(mqRequest); if (!string.Equals(response.Status, "ok", StringComparison.OrdinalIgnoreCase)) { return RabbitMqHttpHelpers.MapError(this, response); } return NoContent(); } }