Переделал на MVC и добавил swagger doc
Build UniVerse plugin / Build library (push) Failing after 11m57s
Build UniVerse plugin / Build library (push) Failing after 11m57s
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace SfeduSchedule.Plugin.UniVerse.Controllers;
|
||||
|
||||
[ApiController]
|
||||
[Route("api/plugins/universe")]
|
||||
public sealed class UniverseController(IUniverseUserLookupService lookupService) : ControllerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Получить Sub ID пользователя по полному имени.
|
||||
/// </summary>
|
||||
/// <param name="fullname">Полное имя пользователя для поиска в Modeus.</param>
|
||||
/// <param name="cancellationToken">Токен отмены запроса.</param>
|
||||
/// <returns>Sub ID пользователя в формате plain text.</returns>
|
||||
/// <response code="200">Пользователь найден, возвращается его Sub ID.</response>
|
||||
/// <response code="400">Не передан обязательный query-параметр fullname.</response>
|
||||
/// <response code="401">Не передан или некорректен API-ключ.</response>
|
||||
/// <response code="403">API-ключ не имеет доступа к методу.</response>
|
||||
/// <response code="404">Пользователь не найден.</response>
|
||||
/// <response code="502">Вышестоящий сервис вернул ошибку или некорректный ответ.</response>
|
||||
/// <response code="500">Внутренняя ошибка обработки запроса.</response>
|
||||
[HttpGet("subid", Name = "UniVerseGetSubId")]
|
||||
[Authorize(AuthenticationSchemes = "ApiKey")]
|
||||
[Produces("text/plain")]
|
||||
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
[ProducesResponseType(StatusCodes.Status403Forbidden)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status502BadGateway)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
|
||||
public async Task<IActionResult> GetSubId(
|
||||
[FromQuery] string? fullname,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(fullname))
|
||||
return BadRequest("Query parameter 'fullname' is required.");
|
||||
|
||||
var result = await lookupService.FindSubIdAsync(fullname, cancellationToken);
|
||||
|
||||
return result.Status switch
|
||||
{
|
||||
UniverseUserLookupStatus.Found => Content(result.SubId!, "text/plain"),
|
||||
UniverseUserLookupStatus.NotFound => NotFound(),
|
||||
UniverseUserLookupStatus.UpstreamError => Problem(
|
||||
result.ErrorMessage,
|
||||
statusCode: StatusCodes.Status502BadGateway),
|
||||
_ => Problem(statusCode: StatusCodes.Status500InternalServerError)
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user