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