/
Kovalenko
/
TODO
Обзор
Документация
Войти
/
Kovalenko
/
TODO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4
TaskApi/Controllers/V1/TasksController.cs
188 строк
6 KB
Kovalenko1
add indController
07 мар 2026, 11:30
07 мар 2026, 11:30
a82b55c
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaskApi.Dtos.V1; using TaskApi.Messages; using TaskApi.Services; namespace TaskApi.Controllers.V1; [ApiController] [Authorize] [ApiExplorerSettings(GroupName = "v1")] [Route("api/v1/tasks")] public class TasksController : ControllerBase { private readonly RabbitMqClientService _clientService; public TasksController(RabbitMqClientService clientService) { _clientService = clientService; } [HttpGet] [ProducesResponseType(typeof(IEnumerable<TaskResponseV1>), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<ActionResult<IEnumerable<TaskResponseV1>>> GetTasks( [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: "v1", action: "get_tasks", payload: new GetTasksData { 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(TaskResponseV1), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<ActionResult<TaskResponseV1>> GetTask(Guid id) { var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v1", 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(TaskResponseV1), StatusCodes.Status201Created)] [ProducesResponseType(typeof(TaskResponseV1), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status409Conflict)] public async Task<ActionResult<TaskResponseV1>> CreateTask([FromBody] TaskCreateRequestV1 request) { var title = ApiHelpers.NormalizeRequired(request.Title); if (title is null) { return BadRequest("Title is required."); } var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v1", action: "create_task", payload: new TaskData { Title = title, Description = request.Description, Status = request.Status.ToString(), DueDate = request.DueDate?.ToString("O") }, 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(TaskResponseV1), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<ActionResult<TaskResponseV1>> UpdateTask(Guid id, [FromBody] TaskUpdateRequestV1 request) { var title = ApiHelpers.NormalizeRequired(request.Title); if (title is null) { return BadRequest("Title is required."); } var token = RabbitMqHttpHelpers.ExtractToken( Request.Headers.Authorization, Request.Headers["X-Auth-Token"]); var mqRequest = RabbitMqHttpHelpers.BuildRequest( version: "v1", action: "update_task", payload: new UpdateTaskData { TaskId = id.ToString(), Title = title, Description = request.Description, Status = request.Status.ToString(), DueDate = request.DueDate?.ToString("O") }, 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: "v1", 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(); } }