/
Kovalenko
/
TODO
Обзор
Документация
Войти
/
Kovalenko
/
TODO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4
TaskApi/Controllers/Internal/IdempotencyInternalController.cs
68 строк
2 KB
Kovalenko1
add indController
07 мар 2026, 11:30
07 мар 2026, 11:30
a82b55c
Код
Авторство
О чём код?
using System.Text.Json; using Microsoft.AspNetCore.Mvc; using TaskApi.Dtos.Internal; using TaskApi.Messages; using TaskApi.Services; namespace TaskApi.Controllers.Internal; [ApiController] [ApiExplorerSettings(GroupName = "internal")] [Route("internal/idempotency")] public class IdempotencyInternalController : ControllerBase { private readonly RabbitMqClientService _clientService; public IdempotencyInternalController(RabbitMqClientService clientService) { _clientService = clientService; } [HttpPost("check")] [ProducesResponseType(typeof(IdempotencyProbeResponse), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task<ActionResult<IdempotencyProbeResponse>> Check([FromBody] IdempotencyProbeRequest? request) { var version = string.IsNullOrWhiteSpace(request?.Version) ? "v2" : request.Version.Trim().ToLowerInvariant(); if (!string.Equals(version, "v1", StringComparison.OrdinalIgnoreCase) && !string.Equals(version, "v2", StringComparison.OrdinalIgnoreCase)) { return BadRequest("Version must be either 'v1' or 'v2'."); } var requestId = string.IsNullOrWhiteSpace(request?.RequestId) ? Guid.NewGuid().ToString() : request.RequestId.Trim(); var probeRequest = new ApiRequest { Id = requestId, Version = version, Action = "idempotency_probe", Data = JsonSerializer.SerializeToElement(new EmptyData()), Auth = string.Empty }; var first = await _clientService.SendRequestAsync(probeRequest); var second = await _clientService.SendRequestAsync(probeRequest); var firstDataJson = JsonSerializer.Serialize(first.Data); var secondDataJson = JsonSerializer.Serialize(second.Data); return Ok(new IdempotencyProbeResponse { RequestId = requestId, Version = version, FirstStatus = first.Status, SecondStatus = second.Status, FirstData = first.Data, SecondData = second.Data, IsIdempotent = string.Equals(first.Status, second.Status, StringComparison.OrdinalIgnoreCase) && string.Equals(firstDataJson, secondDataJson, StringComparison.Ordinal) }); } }