From e0fffbd4b569b5e6e56af63581767e3dd7949de4 Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Tue, 14 Oct 2025 23:18:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=B8=D1=8E=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D0=BB=D0=B5=D1=80=D0=B0=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BC=D1=8F=D0=B3=D0=BA=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D0=B7=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SfeduSchedule/Controllers/ProxyController.cs | 68 ++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 SfeduSchedule/Controllers/ProxyController.cs diff --git a/SfeduSchedule/Controllers/ProxyController.cs b/SfeduSchedule/Controllers/ProxyController.cs new file mode 100644 index 0000000..bc9e931 --- /dev/null +++ b/SfeduSchedule/Controllers/ProxyController.cs @@ -0,0 +1,68 @@ +using System.Net; +using System.Text.Json; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.RateLimiting; +using SfeduSchedule.Abstractions; +using SfeduSchedule.Services; + +namespace SfeduSchedule.Controllers; + +[ApiController] +[Route("api/proxy")] +[EnableRateLimiting("throttle")] +public class ProxyController(ModeusService modeusService, ILogger logger) : ControllerBase +{ + /// + /// Получить расписание по пользовательскому запросу. + /// + /// Объект запроса, содержащий параметры фильтрации расписания. + /// Список событий расписания. + /// Возвращает расписание + /// Слишком много запросов + [HttpPost] + public async Task Post([FromBody] ModeusScheduleRequest request) + { + string? schedule; + try + { + schedule = await modeusService.GetScheduleAsync(request); + } + catch (HttpRequestException e) + { + logger.LogError("Ошибка при получении расписания\n\n" + e.Message + "\n\n" + e.StackTrace + + "\n\n JSON: " + + JsonSerializer.Serialize(request, GlobalVariables.JsonSerializerOptions)); + return StatusCode((int)(e.StatusCode ?? HttpStatusCode.InternalServerError), + "Proxied Modeus: " + e.Message); + } + + return Ok(schedule); + } + + /// + /// Поиск аудиторий по пользовательскому запросу. + /// + /// Объект запроса, содержащий параметры фильтрации аудиторий. + /// Список аудиторий. + /// Возвращает список аудиторий + /// Слишком много запросов + [HttpPost] + [Route("rooms/search")] + public async Task SearchRooms([FromBody] RoomSearchRequest request) + { + string? rooms; + try + { + rooms = await modeusService.SearchRoomsAsync(request); + } + catch (HttpRequestException e) + { + logger.LogError("Ошибка при поиске аудиторий\n\n" + e.Message + "\n\n" + e.StackTrace + "\n\n JSON: " + + JsonSerializer.Serialize(request, GlobalVariables.JsonSerializerOptions)); + return StatusCode((int)(e.StatusCode ?? HttpStatusCode.InternalServerError), + "Proxied Modeus: " + e.Message); + } + + return Ok(rooms); + } +} \ No newline at end of file